diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c12cce5..aea9292 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,8 @@ "name": "Python 3 Developer Container", "build": { "dockerfile": "../Dockerfile", - "target": "developer" + "target": "developer", + "platform": "linux/amd64" }, "remoteEnv": { // Allow X11 apps to run inside the container @@ -63,7 +64,25 @@ "source": "devcontainer-shared-cache", "target": "/cache", "type": "volume" - } + }, + { + "source": "${localEnv:HOME}${localEnv:USERPROFILE}", + "target": "/host-home", + "type": "bind" + }, + // Mount facility directories if present on the host (Docker will create + // the host directory if it does not exist). These ensure /dls and + // /dls_sw are available inside the container when present on the host. + // { + // "source": "/dls/i15-1/data", + // "target": "/dls/i15-1/data", + // "type": "bind" + // }, + // { + // "source": "/dls_sw", + // "target": "/dls_sw", + // "type": "bind" + // } ], // Mount the parent as /workspaces so we can pip install peers as editable "workspaceMount": "source=${localWorkspaceFolder}/..,target=/workspaces,type=bind", diff --git a/.gitignore b/.gitignore index 0f33bf2..b45c699 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,16 @@ __pycache__/ # C extensions *.so +#h5 files, but not hdf5 +*.h5 + +# output of running reduction +*.xye +**/processed/ + +#binary files used for ang cal +*.obj + # Distribution / packaging .Python env/ @@ -69,3 +79,6 @@ lockfiles/ # ruff cache .ruff_cache/ + +#mac items +*.DS_Store diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a43ed57..d158bd1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ repos: rev: v5.0.0 hooks: - id: check-added-large-files - exclude: ^uv.lock + exclude: (^uv\.lock$|\.hdf5$) - id: check-yaml - id: check-merge-conflict - id: end-of-file-fixer diff --git a/.vscode/settings.json b/.vscode/settings.json index 101c75f..118c8f8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "python.testing.unittestEnabled": false, + "python.analysis.nodeExecutable": "auto", "python.testing.pytestEnabled": true, "editor.formatOnSave": true, "editor.codeActionsOnSave": { @@ -9,4 +10,6 @@ "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", }, + "python-envs.defaultEnvManager": "ms-python.python:system", + "python-envs.pythonProjects": [], } diff --git a/Dockerfile b/Dockerfile index 4b99b9c..c2e6eb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,28 @@ FROM ghcr.io/diamondlightsource/ubuntu-devcontainer:noble AS developer # Add any system dependencies for the developer/build environment here RUN apt-get update -y && apt-get install -y --no-install-recommends \ graphviz \ - && apt-get dist-clean + && apt-get dist-clean + +RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 libgl1 libegl1 -y +RUN apt-get update && apt-get install -y \ + libx11-xcb-dev \ + libglu1-mesa-dev \ + libxrender-dev \ + libxi-dev \ + libxkbcommon-dev \ + libxkbcommon-x11-dev \ + libegl1 \ + libxcb-cursor0 -y + +RUN apt-get update && apt-get install -y \ + libxcb-icccm4 \ + libxcb-keysyms1 \ + libxcb-render-util0 \ + libxcb-xinerama0 \ + libxcb-xkb1 \ + libxkbcommon-x11-0 + +RUN apt-get install fonts-noto-color-emoji -y # The build stage installs the context into the venv FROM developer AS build @@ -29,7 +50,7 @@ FROM ubuntu:noble AS runtime # Add apt-get system dependecies for runtime here if needed # RUN apt-get update -y && apt-get install -y --no-install-recommends \ -# some-library \ +# some-dependecies \ # && apt-get dist-clean # Copy the python installation from the build stage @@ -42,3 +63,6 @@ ENV PATH=/app/.venv/bin:$PATH # change this entrypoint if it is not the same as the repo ENTRYPOINT ["XRPD-Toolbox"] CMD ["--version"] + +ENV MPLCONFIGDIR=/tmp/matplotlib +RUN export DISPLAY=:0 diff --git a/cifs/CeO2.cif b/cifs/CeO2.cif new file mode 100644 index 0000000..cb1cae4 --- /dev/null +++ b/cifs/CeO2.cif @@ -0,0 +1,267 @@ + +#(C) 2026 by FIZ Karlsruhe - Leibniz Institute for Information Infrastructure. All rights reserved. +data_24887-ICSD +_database_code_ICSD 24887 +_audit_creation_date 2021-08-01 +_chemical_name_common Ceria +_chemical_formula_structural 'Ce O2' +_chemical_formula_sum 'Ce1 O2' +_chemical_name_structure_type CaF2 +_exptl_crystal_density_diffrn 7.19 +_citation_title + +; +Introducing highly redox-active atomic centers into insertion-type electrodes +for lithium-ion batteries +; +loop_ +_citation_id +_citation_journal_full +_citation_year +_citation_journal_volume +_citation_page_first +_citation_page_last +_citation_journal_id_ASTM +primary 'Advanced Energy Materials' 2020 10 1 14 ADEMBC +loop_ +_citation_author_citation_id +_citation_author_name +primary 'Ma, Yanjiao' +primary 'Ma, Yuan' +primary 'Giuli, Gabriele' +primary 'Euchner, Holger' +primary 'Gross, Axel' +primary 'Lepore, Giovanni Orazio' +primary "d'Acapito, Francesco" +primary 'Geiger, Dorin' +primary 'Biskupek, Johannes' +primary 'Kaiser, Ute' +primary 'Schütz, Hanno M.' +primary 'Carlsson, Anna' +primary 'Diemant, Thomas' +primary 'Behm, Rolf Jürgen' +primary 'Kuenzel, Matthias' +primary 'Passerini, Stef' +_cell_length_a 5.4178(1) +_cell_length_b 5.4178(1) +_cell_length_c 5.4178(1) +_cell_angle_alpha 90. +_cell_angle_beta 90. +_cell_angle_gamma 90. +_cell_volume 159.03 +_cell_formula_units_Z 4 +_space_group_name_H-M_alt 'F m -3 m' +_space_group_IT_number 225 +loop_ +_space_group_symop_id +_space_group_symop_operation_xyz +1 'z, y, -x' +2 'y, x, -z' +3 'x, z, -y' +4 'z, x, -y' +5 'y, z, -x' +6 'x, y, -z' +7 'z, -y, x' +8 'y, -x, z' +9 'x, -z, y' +10 'z, -x, y' +11 'y, -z, x' +12 'x, -y, z' +13 '-z, y, x' +14 '-y, x, z' +15 '-x, z, y' +16 '-z, x, y' +17 '-y, z, x' +18 '-x, y, z' +19 '-z, -y, -x' +20 '-y, -x, -z' +21 '-x, -z, -y' +22 '-z, -x, -y' +23 '-y, -z, -x' +24 '-x, -y, -z' +25 '-z, -y, x' +26 '-y, -x, z' +27 '-x, -z, y' +28 '-z, -x, y' +29 '-y, -z, x' +30 '-x, -y, z' +31 '-z, y, -x' +32 '-y, x, -z' +33 '-x, z, -y' +34 '-z, x, -y' +35 '-y, z, -x' +36 '-x, y, -z' +37 'z, -y, -x' +38 'y, -x, -z' +39 'x, -z, -y' +40 'z, -x, -y' +41 'y, -z, -x' +42 'x, -y, -z' +43 'z, y, x' +44 'y, x, z' +45 'x, z, y' +46 'z, x, y' +47 'y, z, x' +48 'x, y, z' +49 'z, y+1/2, -x+1/2' +50 'y, x+1/2, -z+1/2' +51 'x, z+1/2, -y+1/2' +52 'z, x+1/2, -y+1/2' +53 'y, z+1/2, -x+1/2' +54 'x, y+1/2, -z+1/2' +55 'z, -y+1/2, x+1/2' +56 'y, -x+1/2, z+1/2' +57 'x, -z+1/2, y+1/2' +58 'z, -x+1/2, y+1/2' +59 'y, -z+1/2, x+1/2' +60 'x, -y+1/2, z+1/2' +61 '-z, y+1/2, x+1/2' +62 '-y, x+1/2, z+1/2' +63 '-x, z+1/2, y+1/2' +64 '-z, x+1/2, y+1/2' +65 '-y, z+1/2, x+1/2' +66 '-x, y+1/2, z+1/2' +67 '-z, -y+1/2, -x+1/2' +68 '-y, -x+1/2, -z+1/2' +69 '-x, -z+1/2, -y+1/2' +70 '-z, -x+1/2, -y+1/2' +71 '-y, -z+1/2, -x+1/2' +72 '-x, -y+1/2, -z+1/2' +73 '-z, -y+1/2, x+1/2' +74 '-y, -x+1/2, z+1/2' +75 '-x, -z+1/2, y+1/2' +76 '-z, -x+1/2, y+1/2' +77 '-y, -z+1/2, x+1/2' +78 '-x, -y+1/2, z+1/2' +79 '-z, y+1/2, -x+1/2' +80 '-y, x+1/2, -z+1/2' +81 '-x, z+1/2, -y+1/2' +82 '-z, x+1/2, -y+1/2' +83 '-y, z+1/2, -x+1/2' +84 '-x, y+1/2, -z+1/2' +85 'z, -y+1/2, -x+1/2' +86 'y, -x+1/2, -z+1/2' +87 'x, -z+1/2, -y+1/2' +88 'z, -x+1/2, -y+1/2' +89 'y, -z+1/2, -x+1/2' +90 'x, -y+1/2, -z+1/2' +91 'z, y+1/2, x+1/2' +92 'y, x+1/2, z+1/2' +93 'x, z+1/2, y+1/2' +94 'z, x+1/2, y+1/2' +95 'y, z+1/2, x+1/2' +96 'x, y+1/2, z+1/2' +97 'z+1/2, y, -x+1/2' +98 'y+1/2, x, -z+1/2' +99 'x+1/2, z, -y+1/2' +100 'z+1/2, x, -y+1/2' +101 'y+1/2, z, -x+1/2' +102 'x+1/2, y, -z+1/2' +103 'z+1/2, -y, x+1/2' +104 'y+1/2, -x, z+1/2' +105 'x+1/2, -z, y+1/2' +106 'z+1/2, -x, y+1/2' +107 'y+1/2, -z, x+1/2' +108 'x+1/2, -y, z+1/2' +109 '-z+1/2, y, x+1/2' +110 '-y+1/2, x, z+1/2' +111 '-x+1/2, z, y+1/2' +112 '-z+1/2, x, y+1/2' +113 '-y+1/2, z, x+1/2' +114 '-x+1/2, y, z+1/2' +115 '-z+1/2, -y, -x+1/2' +116 '-y+1/2, -x, -z+1/2' +117 '-x+1/2, -z, -y+1/2' +118 '-z+1/2, -x, -y+1/2' +119 '-y+1/2, -z, -x+1/2' +120 '-x+1/2, -y, -z+1/2' +121 '-z+1/2, -y, x+1/2' +122 '-y+1/2, -x, z+1/2' +123 '-x+1/2, -z, y+1/2' +124 '-z+1/2, -x, y+1/2' +125 '-y+1/2, -z, x+1/2' +126 '-x+1/2, -y, z+1/2' +127 '-z+1/2, y, -x+1/2' +128 '-y+1/2, x, -z+1/2' +129 '-x+1/2, z, -y+1/2' +130 '-z+1/2, x, -y+1/2' +131 '-y+1/2, z, -x+1/2' +132 '-x+1/2, y, -z+1/2' +133 'z+1/2, -y, -x+1/2' +134 'y+1/2, -x, -z+1/2' +135 'x+1/2, -z, -y+1/2' +136 'z+1/2, -x, -y+1/2' +137 'y+1/2, -z, -x+1/2' +138 'x+1/2, -y, -z+1/2' +139 'z+1/2, y, x+1/2' +140 'y+1/2, x, z+1/2' +141 'x+1/2, z, y+1/2' +142 'z+1/2, x, y+1/2' +143 'y+1/2, z, x+1/2' +144 'x+1/2, y, z+1/2' +145 'z+1/2, y+1/2, -x' +146 'y+1/2, x+1/2, -z' +147 'x+1/2, z+1/2, -y' +148 'z+1/2, x+1/2, -y' +149 'y+1/2, z+1/2, -x' +150 'x+1/2, y+1/2, -z' +151 'z+1/2, -y+1/2, x' +152 'y+1/2, -x+1/2, z' +153 'x+1/2, -z+1/2, y' +154 'z+1/2, -x+1/2, y' +155 'y+1/2, -z+1/2, x' +156 'x+1/2, -y+1/2, z' +157 '-z+1/2, y+1/2, x' +158 '-y+1/2, x+1/2, z' +159 '-x+1/2, z+1/2, y' +160 '-z+1/2, x+1/2, y' +161 '-y+1/2, z+1/2, x' +162 '-x+1/2, y+1/2, z' +163 '-z+1/2, -y+1/2, -x' +164 '-y+1/2, -x+1/2, -z' +165 '-x+1/2, -z+1/2, -y' +166 '-z+1/2, -x+1/2, -y' +167 '-y+1/2, -z+1/2, -x' +168 '-x+1/2, -y+1/2, -z' +169 '-z+1/2, -y+1/2, x' +170 '-y+1/2, -x+1/2, z' +171 '-x+1/2, -z+1/2, y' +172 '-z+1/2, -x+1/2, y' +173 '-y+1/2, -z+1/2, x' +174 '-x+1/2, -y+1/2, z' +175 '-z+1/2, y+1/2, -x' +176 '-y+1/2, x+1/2, -z' +177 '-x+1/2, z+1/2, -y' +178 '-z+1/2, x+1/2, -y' +179 '-y+1/2, z+1/2, -x' +180 '-x+1/2, y+1/2, -z' +181 'z+1/2, -y+1/2, -x' +182 'y+1/2, -x+1/2, -z' +183 'x+1/2, -z+1/2, -y' +184 'z+1/2, -x+1/2, -y' +185 'y+1/2, -z+1/2, -x' +186 'x+1/2, -y+1/2, -z' +187 'z+1/2, y+1/2, x' +188 'y+1/2, x+1/2, z' +189 'x+1/2, z+1/2, y' +190 'z+1/2, x+1/2, y' +191 'y+1/2, z+1/2, x' +192 'x+1/2, y+1/2, z' +loop_ +_atom_type_symbol +_atom_type_oxidation_number +Ce4+ 4 +O2- -2 +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_symmetry_multiplicity +_atom_site_Wyckoff_symbol +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_U_iso_or_equiv +_atom_site_occupancy +Ce1 Ce4+ 4 a 0 0 0 0.00078 1. +O1 O2- 8 c 0.25 0.25 0.25 0.005 1. +#End of TTdata_24887-ICSD diff --git a/cifs/Lab6.cif b/cifs/Lab6.cif new file mode 100644 index 0000000..798c1cb --- /dev/null +++ b/cifs/Lab6.cif @@ -0,0 +1,165 @@ +#------------------------------------------------------------------------------ +#$Date: 2017-01-29 23:22:55 +0200 (Sun, 29 Jan 2017) $ +#$Revision: 191079 $ +#$URL: file:///home/coder/svn-repositories/_RELOADED_COD/cod-reloaded/cif/2/10/47/2104736.cif $ +#------------------------------------------------------------------------------ +# +# This file is available in the Crystallography Open Database (COD), +# http://www.crystallography.net/. The original data for this entry +# were provided by IUCr Journals, http://journals.iucr.org/. +# +# The file may be used within the scientific community so long as +# proper attribution is given to the journal article from which the +# data were obtained. +# +data_2104736 +loop_ +_publ_author_name +'Elliot, Alexander Dean' +_publ_section_title +; + Structure of pyrrhotite 5C (Fe~9~S~10~) +; +_journal_coeditor_code KD5037 +_journal_issue 3 +_journal_name_full 'Acta Crystallographica Section B' +_journal_page_first 271 +_journal_page_last 279 +_journal_paper_doi 10.1107/S0108768110011845 +_journal_volume 66 +_journal_year 2010 +_chemical_formula_sum 'B6 La' +_chemical_formula_weight 203.772 +_chemical_name_common 'Lanthanum Hexaboride' +_space_group_crystal_system cubic +_space_group_IT_number 221 +_space_group_name_Hall '-P 4 2 3' +_space_group_name_H-M_alt 'P m -3 m' +_symmetry_space_group_name_Hall '-P 4 2 3' +_symmetry_space_group_name_H-M 'P m -3 m' +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90 +_cell_formula_units_Z 1 +_cell_length_a 4.15706(1) +_cell_length_b 4.15706(1) +_cell_length_c 4.15706(1) +_cell_volume 71.8388(3) +_exptl_absorpt_coefficient_mu 21.62738(11) +_exptl_crystal_density_diffrn 4.71028(2) +_pd_block_id 2010-05-12T23:22|LaB6|A.Elliot|5Ca2 +_pd_proc_ls_profile_function +; +Crystallite size and strain modelled with Lorentzian and +Gaussian component convolutions +LaB6 Phase + CS_L(@, 3584.60821`_117.29623 min 1000 max 50000) +; +_refine_ls_R_I_factor 0.02147 +_cod_data_source_file kd5037.cif +_cod_data_source_block (5Ca2)_LaB6 +_cod_depositor_comments +; + Moving _atom_site_aniso_U_* data items from the _atom_site loop to the + _atom_site_aniso loop and adding the _atom_site_aniso_label data item. + + Antanas Vaitkus, + 2017-01-29 +; +_cod_database_code 2104736 +loop_ +_symmetry_equiv_pos_as_xyz +'-x, -y, -z' +'-x, -y, z' +'-x, -z, -y' +'-x, -z, y' +'-x, z, -y' +'-x, z, y' +'-x, y, -z' +'-x, y, z' +'-y, -x, -z' +'-y, -x, z' +'-y, -z, -x' +'-y, -z, x' +'-y, z, -x' +'-y, z, x' +'-y, x, -z' +'-y, x, z' +'-z, -x, -y' +'-z, -x, y' +'-z, -y, -x' +'-z, -y, x' +'-z, y, -x' +'-z, y, x' +'-z, x, -y' +'-z, x, y' +'z, -x, -y' +'z, -x, y' +'z, -y, -x' +'z, -y, x' +'z, y, -x' +'z, y, x' +'z, x, -y' +'z, x, y' +'y, -x, -z' +'y, -x, z' +'y, -z, -x' +'y, -z, x' +'y, z, -x' +'y, z, x' +'y, x, -z' +'y, x, z' +'x, -y, -z' +'x, -y, z' +'x, -z, -y' +'x, -z, y' +'x, z, -y' +'x, z, y' +'x, y, -z' +'x, y, z' +loop_ +_atom_site_aniso_label +_atom_site_aniso_U_11 +_atom_site_aniso_U_22 +_atom_site_aniso_U_33 +_atom_site_aniso_U_12 +_atom_site_aniso_U_13 +_atom_site_aniso_U_23 +La1 0.00338(5) 0.00338(5) 0.00338(5) 0 0 0 +B1 0.00535(94) 0.00000(45) 0.00000(45) 0 0 0 +loop_ +_atom_site_label +_atom_site_type_symbol +_atom_site_symmetry_multiplicity +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +_atom_site_occupancy +La1 La 1 0 0 0 1 +B1 B 6 0.19853(40) 0.5 0.5 1 +loop_ +_atom_type_symbol +_atom_type_description +_atom_type_scat_dispersion_real +_atom_type_scat_dispersion_imag +_atom_type_scat_source +La La 57.085 3.411 'Default dataset used by TOPAS R3' +B B 5.002 0.0010 'Default dataset used by TOPAS R3' +loop_ +_citation_title +_citation_page_first +_citation_page_last +_citation_year +_citation_journal_abbrev +_citation_journal_volume +_citation_journal_id_ISSN +; X-ray structural investigation of single crystals of lanthanum, +cerium, and samarium hexaborides +; +803 805 1986 +; +; +; +; +; +; diff --git a/cifs/Si.cif b/cifs/Si.cif new file mode 100644 index 0000000..3befb8c --- /dev/null +++ b/cifs/Si.cif @@ -0,0 +1,226 @@ +data_global +_chemical_name_mineral 'Silicon' +loop_ +_publ_author_name +'Wyckoff R W G' +_journal_name_full 'Crystal Structures' +_journal_volume 1 +_journal_year 1963 +_journal_page_first 7 +_journal_page_last 83 +_publ_section_title +; + Second edition. Interscience Publishers, New York, New York + Sample at T = 300 K +; +_database_code_amcsd 0011243 +_chemical_formula_sum 'Si' +_cell_length_a 5.43070 +_cell_length_b 5.43070 +_cell_length_c 5.43070 +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90 +_cell_volume 160.165 +_exptl_crystal_density_diffrn 2.329 +_symmetry_space_group_name_H-M 'F d 3 m' +loop_ +_space_group_symop_operation_xyz + 'x,y,z' + 'x,1/2+y,1/2+z' + '1/2+x,y,1/2+z' + '1/2+x,1/2+y,z' + '3/4+z,3/4-x,1/4+y' + '3/4+z,1/4-x,3/4+y' + '1/4+z,3/4-x,3/4+y' + '1/4+z,1/4-x,1/4+y' + '-y,1/2+z,1/2-x' + '-y,+z,-x' + '1/2-y,1/2+z,-x' + '1/2-y,+z,1/2-x' + '3/4+x,3/4-y,1/4+z' + '3/4+x,1/4-y,3/4+z' + '1/4+x,3/4-y,3/4+z' + '1/4+x,1/4-y,1/4+z' + '-z,1/2+x,1/2-y' + '-z,+x,-y' + '1/2-z,1/2+x,-y' + '1/2-z,+x,1/2-y' + '3/4+y,3/4-z,1/4+x' + '3/4+y,1/4-z,3/4+x' + '1/4+y,3/4-z,3/4+x' + '1/4+y,1/4-z,1/4+x' + '-x,1/2+y,1/2-z' + '-x,+y,-z' + '1/2-x,1/2+y,-z' + '1/2-x,+y,1/2-z' + '1/2+x,-z,1/2-y' + '1/2+x,1/2-z,-y' + '+x,-z,-y' + '+x,1/2-z,1/2-y' + '3/4-z,3/4+y,1/4+x' + '3/4-z,1/4+y,3/4+x' + '1/4-z,3/4+y,3/4+x' + '1/4-z,1/4+y,1/4+x' + '1/2+y,-x,1/2-z' + '1/2+y,1/2-x,-z' + '+y,-x,-z' + '+y,1/2-x,1/2-z' + '3/4-x,3/4+z,1/4+y' + '3/4-x,1/4+z,3/4+y' + '1/4-x,3/4+z,3/4+y' + '1/4-x,1/4+z,1/4+y' + '1/2+z,-y,1/2-x' + '1/2+z,1/2-y,-x' + '+z,-y,-x' + '+z,1/2-y,1/2-x' + '3/4-y,3/4+x,1/4+z' + '3/4-y,1/4+x,3/4+z' + '1/4-y,3/4+x,3/4+z' + '1/4-y,1/4+x,1/4+z' + 'x,1/2+z,1/2+y' + 'x,+z,+y' + '1/2+x,1/2+z,+y' + '1/2+x,+z,1/2+y' + '1/4-z,3/4-y,3/4-x' + '1/4-z,1/4-y,1/4-x' + '3/4-z,3/4-y,1/4-x' + '3/4-z,1/4-y,3/4-x' + 'y,1/2+x,1/2+z' + 'y,+x,+z' + '1/2+y,1/2+x,+z' + '1/2+y,+x,1/2+z' + '1/4-x,3/4-z,3/4-y' + '1/4-x,1/4-z,1/4-y' + '3/4-x,3/4-z,1/4-y' + '3/4-x,1/4-z,3/4-y' + 'z,1/2+y,1/2+x' + 'z,+y,+x' + '1/2+z,1/2+y,+x' + '1/2+z,+y,1/2+x' + '1/4-y,3/4-x,3/4-z' + '1/4-y,1/4-x,1/4-z' + '3/4-y,3/4-x,1/4-z' + '3/4-y,1/4-x,3/4-z' + '3/4+z,1/4+x,3/4-y' + '3/4+z,3/4+x,1/4-y' + '1/4+z,1/4+x,1/4-y' + '1/4+z,3/4+x,3/4-y' + '-y,1/2-z,1/2+x' + '-y,-z,+x' + '1/2-y,1/2-z,+x' + '1/2-y,-z,1/2+x' + '3/4+x,1/4+y,3/4-z' + '3/4+x,3/4+y,1/4-z' + '1/4+x,1/4+y,1/4-z' + '1/4+x,3/4+y,3/4-z' + '-z,1/2-x,1/2+y' + '-z,-x,+y' + '1/2-z,1/2-x,+y' + '1/2-z,-x,1/2+y' + '3/4+y,1/4+z,3/4-x' + '3/4+y,3/4+z,1/4-x' + '1/4+y,1/4+z,1/4-x' + '1/4+y,3/4+z,3/4-x' + '-x,1/2-y,1/2+z' + '-x,-y,+z' + '1/2-x,1/2-y,+z' + '1/2-x,-y,1/2+z' + '1/4-z,3/4+x,3/4+y' + '1/4-z,1/4+x,1/4+y' + '3/4-z,3/4+x,1/4+y' + '3/4-z,1/4+x,3/4+y' + 'y,-z,-x' + 'y,1/2-z,1/2-x' + '1/2+y,-z,1/2-x' + '1/2+y,1/2-z,-x' + '1/4-x,3/4+y,3/4+z' + '1/4-x,1/4+y,1/4+z' + '3/4-x,3/4+y,1/4+z' + '3/4-x,1/4+y,3/4+z' + 'z,-x,-y' + 'z,1/2-x,1/2-y' + '1/2+z,-x,1/2-y' + '1/2+z,1/2-x,-y' + '1/4-y,3/4+z,3/4+x' + '1/4-y,1/4+z,1/4+x' + '3/4-y,3/4+z,1/4+x' + '3/4-y,1/4+z,3/4+x' + 'x,-y,-z' + 'x,1/2-y,1/2-z' + '1/2+x,-y,1/2-z' + '1/2+x,1/2-y,-z' + '1/2-x,1/2+z,-y' + '1/2-x,+z,1/2-y' + '-x,1/2+z,1/2-y' + '-x,+z,-y' + '1/4+z,3/4-y,3/4+x' + '1/4+z,1/4-y,1/4+x' + '3/4+z,3/4-y,1/4+x' + '3/4+z,1/4-y,3/4+x' + '1/2-y,1/2+x,-z' + '1/2-y,+x,1/2-z' + '-y,1/2+x,1/2-z' + '-y,+x,-z' + '1/4+x,3/4-z,3/4+y' + '1/4+x,1/4-z,1/4+y' + '3/4+x,3/4-z,1/4+y' + '3/4+x,1/4-z,3/4+y' + '1/2-z,1/2+y,-x' + '1/2-z,+y,1/2-x' + '-z,1/2+y,1/2-x' + '-z,+y,-x' + '1/4+y,3/4-x,3/4+z' + '1/4+y,1/4-x,1/4+z' + '3/4+y,3/4-x,1/4+z' + '3/4+y,1/4-x,3/4+z' + '-x,-z,y' + '-x,1/2-z,1/2+y' + '1/2-x,-z,1/2+y' + '1/2-x,1/2-z,y' + '3/4+z,3/4+y,1/4-x' + '3/4+z,1/4+y,3/4-x' + '1/4+z,3/4+y,3/4-x' + '1/4+z,1/4+y,1/4-x' + '-y,-x,z' + '-y,1/2-x,1/2+z' + '1/2-y,-x,1/2+z' + '1/2-y,1/2-x,z' + '3/4+x,3/4+z,1/4-y' + '3/4+x,1/4+z,3/4-y' + '1/4+x,3/4+z,3/4-y' + '1/4+x,1/4+z,1/4-y' + '-z,-y,x' + '-z,1/2-y,1/2+x' + '1/2-z,-y,1/2+x' + '1/2-z,1/2-y,x' + '3/4+y,3/4+x,1/4-z' + '3/4+y,1/4+x,3/4-z' + '1/4+y,3/4+x,3/4-z' + '1/4+y,1/4+x,1/4-z' + '1/4-z,1/4-x,1/4-y' + '1/4-z,3/4-x,3/4-y' + '3/4-z,1/4-x,3/4-y' + '3/4-z,3/4-x,1/4-y' + 'y,z,x' + 'y,1/2+z,1/2+x' + '1/2+y,z,1/2+x' + '1/2+y,1/2+z,x' + '1/4-x,1/4-y,1/4-z' + '1/4-x,3/4-y,3/4-z' + '3/4-x,1/4-y,3/4-z' + '3/4-x,3/4-y,1/4-z' + 'z,x,y' + 'z,1/2+x,1/2+y' + '1/2+z,x,1/2+y' + '1/2+z,1/2+x,y' + '1/4-y,1/4-z,1/4-x' + '1/4-y,3/4-z,3/4-x' + '3/4-y,1/4-z,3/4-x' + '3/4-y,3/4-z,1/4-x' +loop_ +_atom_site_label +_atom_site_fract_x +_atom_site_fract_y +_atom_site_fract_z +Si 0.00000 0.00000 0.00000 diff --git a/cifs/si_data.txt b/cifs/si_data.txt new file mode 100644 index 0000000..122f66e --- /dev/null +++ b/cifs/si_data.txt @@ -0,0 +1,62 @@ + h k l d (Å) F(real) F(imag) |F| 2θ I M ID(λ) Phase + 1 1 1 3.135416 42.918529 -42.174846 60.1724 15.02750 100.00000 8 1 1 + 2 2 0 1.920042 70.526914 0.743683 70.5308 24.65942 78.42871 12 1 1 + 3 1 1 1.637418 32.703565 33.447248 46.7786 29.00169 50.63669 24 1 1 + 2 2 2 1.567708 0.000000 0.000000 1.19071e-14 30.32153 0.00000 8 1 1 + 4 0 0 1.357675 60.911197 0.743683 60.9157 35.15396 14.98810 6 1 1 + 3 3 1 1.245888 29.531380 -28.787697 41.2412 38.42620 23.36149 24 1 1 + 4 2 2 1.108537 54.470432 0.743683 54.4755 43.41358 32.79720 24 1 1 + 3 3 3 1.045139 25.810943 26.554626 37.0318 46.19443 4.53580 8 1 1 + 5 1 1 1.045139 26.554626 -25.810943 37.0318 46.19443 13.60741 24 1 1 + 4 4 0 0.960021 49.131451 0.743683 49.1371 50.56401 10.28179 12 1 1 + 5 3 1 0.917956 23.296877 24.040560 33.4768 53.05721 17.63877 48 1 1 + 4 4 2 0.905117 0.000000 0.000000 3.51177e-14 53.87012 0.00000 24 1 1 + 6 2 0 0.858669 44.566753 0.743683 44.573 57.04230 13.93074 24 1 1 + 5 3 3 0.828174 21.884712 -21.141029 30.4283 59.34808 6.10721 24 1 1 + 6 2 2 0.818709 0.000000 -0.000000 2.46608e-14 60.10437 0.00000 24 1 1 + 4 4 4 0.783854 40.642055 0.743683 40.6489 63.07501 3.31776 8 1 1 + 5 5 1 0.760450 20.029115 -19.285433 27.8046 65.25219 4.43553 24 1 1 + 7 1 1 0.760450 19.285433 20.029115 27.8046 65.25219 4.43553 24 1 1 + 6 4 2 0.725708 37.258653 0.743683 37.2661 68.79982 14.81350 48 1 1 + 5 5 3 0.707017 17.684316 18.427999 25.5407 70.88720 3.34445 24 1 1 + 7 3 1 0.707017 18.427999 -17.684316 25.5407 70.88720 6.68890 48 1 1 + 8 0 0 0.678837 34.334848 0.743683 34.3429 74.31006 1.42454 6 1 1 + 7 3 3 0.663466 16.299420 17.043102 23.5826 76.33569 2.60181 24 1 1 + 6 4 4 0.658569 0.000000 -0.000000 4.64906e-16 77.00692 0.00000 24 1 1 + 6 6 0 0.640014 31.801918 0.743683 31.8106 79.67477 2.25527 12 1 1 + 8 2 2 0.640014 31.801918 0.743683 31.8106 79.67477 4.51054 24 1 1 + 7 5 1 0.627083 15.098512 15.842195 21.8847 81.66058 4.15966 48 1 1 + 5 5 5 0.627083 15.842195 -15.098512 21.8847 81.66058 0.69328 8 1 1 + 6 6 2 0.622944 -0.000000 0.000000 5.40295e-14 82.32017 0.00000 24 1 1 + 8 4 0 0.607171 29.601901 0.743683 29.6112 84.94918 3.66200 24 1 1 + 7 5 3 0.596097 14.798082 -14.054399 20.4086 86.91366 3.40727 48 1 1 + 9 1 1 0.596097 14.798082 -14.054399 20.4086 86.91366 1.70364 24 1 1 + 8 4 2 0.592538 0.000000 -0.000000 7.30012e-16 87.56756 0.00000 48 1 1 + 6 6 4 0.578915 27.685862 0.743683 27.6958 90.18087 3.04264 24 1 1 + 9 3 1 0.569292 13.144111 13.887794 19.1217 92.14080 2.85447 48 1 1 + 8 4 4 0.554268 26.012448 0.743683 26.0231 95.41407 2.58336 24 1 1 + 7 5 5 0.545806 12.348234 13.091917 17.9966 97.38589 1.22136 24 1 1 + 7 7 1 0.545806 13.091917 -12.348234 17.9966 97.38589 1.22136 24 1 1 + 9 3 3 0.545806 13.091917 -12.348234 17.9966 97.38589 1.22136 24 1 1 + 8 6 2 0.532524 24.546686 0.743683 24.5579 100.69313 4.47884 48 1 1 + 10 2 0 0.532524 24.546686 0.743683 24.5579 100.69313 2.23942 24 1 1 + 7 7 3 0.525006 11.650341 12.394024 17.0101 102.69420 1.06691 24 1 1 + 9 5 1 0.525006 12.394024 -11.650341 17.0101 102.69420 2.13382 48 1 1 + 6 6 6 0.522569 0.000000 -0.000000 1.86795e-14 103.36460 0.00000 8 1 1 + 10 2 2 0.522569 -0.000000 0.000000 4.20017e-14 103.36460 0.00000 24 1 1 + 9 5 3 0.506415 11.036517 11.780200 16.1424 108.11610 1.90265 48 1 1 + 8 6 4 0.504228 -0.000000 0.000000 2.26115e-14 108.80468 0.00000 48 1 1 + 10 4 2 0.495753 22.124179 0.743683 22.1367 111.58869 3.58024 48 1 1 + 11 1 1 0.489670 10.494964 11.238646 15.377 113.71200 0.86647 24 1 1 + 7 7 5 0.489670 11.238646 -10.494964 15.377 113.71200 0.86647 24 1 1 + 8 8 0 0.480011 21.121037 0.743683 21.1341 117.33144 0.82680 12 1 1 + 9 7 1 0.474482 10.015665 10.759348 14.6996 119.56006 1.61519 48 1 1 + 11 3 1 0.474482 10.759348 -10.015665 14.6996 119.56006 1.61519 48 1 1 + 9 5 5 0.474482 10.759348 -10.015665 14.6996 119.56006 0.80760 24 1 1 + 8 8 2 0.472682 -0.000000 0.000000 2.06166e-14 120.31377 0.00000 24 1 1 + 10 4 4 0.472682 -0.000000 0.000000 2.06166e-14 120.31377 0.00000 24 1 1 + 10 6 0 0.465679 20.231441 0.743683 20.2451 123.38987 1.56629 24 1 1 + 8 6 6 0.465679 20.231441 0.743683 20.2451 123.38987 1.56629 24 1 1 + 9 7 3 0.460626 10.333790 -9.590107 14.0981 125.76991 1.54628 48 1 1 + 11 3 3 0.460626 9.590107 10.333790 14.0981 125.76991 0.77314 24 1 1 + 10 6 2 0.458978 -0.000000 -0.000000 1.56336e-14 126.57904 0.00000 48 1 1 diff --git a/config/i11/bad_channels.txt b/config/i11/bad_channels.txt new file mode 100644 index 0000000..7072e52 --- /dev/null +++ b/config/i11/bad_channels.txt @@ -0,0 +1,2990 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +165 +252 +377 +444 +464 +599 +1188 +1238 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1310 +1365 +1603 +1864 +2545 +2546 +2547 +2548 +2549 +2550 +2551 +2552 +2553 +2554 +2555 +2556 +2557 +2558 +2559 +2560 +2561 +2562 +2563 +2564 +2565 +2566 +2567 +2568 +2569 +2570 +2571 +2572 +2573 +2574 +2671 +2795 +3277 +3319 +3321 +3327 +3369 +3370 +3371 +3375 +3666 +3681 +3825 +3826 +3827 +3828 +3829 +3830 +3831 +3832 +3833 +3834 +3835 +3836 +3837 +3838 +3839 +3840 +3841 +3842 +3843 +3844 +3845 +3846 +3847 +3848 +3849 +3850 +3851 +3852 +3853 +3854 +4528 +4534 +4618 +4624 +4639 +4640 +4650 +4740 +5019 +5100 +5101 +5102 +5103 +5104 +5105 +5106 +5107 +5108 +5109 +5110 +5111 +5112 +5113 +5114 +5115 +5116 +5117 +5118 +5119 +5120 +5121 +5122 +5123 +5124 +5125 +5126 +5127 +5128 +5129 +5130 +5131 +5132 +5133 +5134 +5135 +5136 +5137 +5138 +5139 +5140 +5141 +5142 +5143 +5144 +5145 +5146 +5147 +5148 +5149 +5150 +5151 +5152 +5153 +5154 +5155 +5156 +5157 +5158 +5159 +5160 +5161 +5162 +5163 +5164 +5165 +5166 +5167 +5168 +5169 +5170 +5171 +5172 +5173 +5174 +5175 +5176 +5177 +5178 +5179 +5180 +5181 +5182 +5183 +5184 +5185 +5186 +5187 +5188 +5189 +5190 +5191 +5192 +5193 +5194 +5195 +5196 +5197 +5198 +5199 +5200 +5201 +5202 +5203 +5204 +5205 +5206 +5207 +5208 +5209 +5210 +5211 +5212 +5213 +5214 +5215 +5216 +5217 +5218 +5219 +5220 +5221 +5222 +5223 +5224 +5225 +5226 +5227 +5228 +5229 +5230 +5231 +5232 +5233 +5234 +5235 +5236 +5237 +5238 +5239 +5240 +5241 +5242 +5243 +5244 +5245 +5246 +5247 +5248 +5249 +5250 +5251 +5252 +5253 +5254 +5255 +5256 +5257 +5258 +5259 +5260 +5261 +5262 +5263 +5264 +5265 +5266 +5267 +5268 +5269 +5270 +5271 +5272 +5273 +5274 +5275 +5276 +5277 +5278 +5279 +5280 +5281 +5282 +5283 +5284 +5285 +5286 +5287 +5288 +5289 +5290 +5291 +5292 +5293 +5294 +5295 +5296 +5297 +5298 +5299 +5300 +5301 +5302 +5303 +5304 +5305 +5306 +5307 +5308 +5309 +5310 +5311 +5312 +5313 +5314 +5315 +5316 +5317 +5318 +5319 +5320 +5321 +5322 +5323 +5324 +5325 +5326 +5327 +5328 +5329 +5330 +5331 +5332 +5333 +5334 +5335 +5336 +5337 +5338 +5339 +5340 +5341 +5342 +5343 +5344 +5345 +5346 +5347 +5348 +5349 +5350 +5351 +5352 +5353 +5354 +5355 +5356 +5357 +5358 +5359 +5360 +5361 +5362 +5363 +5364 +5365 +5366 +5367 +5368 +5369 +5370 +5371 +5372 +5373 +5374 +5375 +5376 +5377 +5378 +5379 +5380 +5381 +5382 +5383 +5384 +5385 +5386 +5387 +5388 +5389 +5390 +5391 +5392 +5393 +5394 +5395 +5396 +5397 +5398 +5399 +5940 +6245 +6385 +6386 +6387 +6388 +6389 +6390 +6391 +6392 +6393 +6394 +6395 +6396 +6397 +6398 +6399 +6400 +6401 +6402 +6403 +6404 +6405 +6406 +6407 +6408 +6409 +6410 +6411 +6412 +6413 +6414 +6965 +6982 +6983 +6984 +7665 +7666 +7667 +7668 +7669 +7670 +7671 +7672 +7673 +7674 +7675 +7676 +7677 +7678 +7679 +7680 +7681 +7682 +7683 +7684 +7685 +7686 +7687 +7688 +7689 +7690 +7691 +7692 +7693 +7694 +7711 +7712 +7726 +8132 +8133 +8134 +8135 +8482 +8499 +8671 +8676 +8683 +8945 +8946 +8947 +8948 +8949 +8950 +8951 +8952 +8953 +8954 +8955 +8956 +8957 +8958 +8959 +8960 +8961 +8962 +8963 +8964 +8965 +8966 +8967 +8968 +8969 +8970 +8971 +8972 +8973 +8974 +10074 +10225 +10226 +10227 +10228 +10229 +10230 +10231 +10232 +10233 +10234 +10235 +10236 +10237 +10238 +10239 +10240 +10241 +10242 +10243 +10244 +10245 +10246 +10247 +10248 +10249 +10250 +10251 +10252 +10253 +10254 +11065 +11066 +11505 +11506 +11507 +11508 +11509 +11510 +11511 +11512 +11513 +11514 +11515 +11516 +11517 +11518 +11519 +11520 +11521 +11522 +11523 +11524 +11525 +11526 +11527 +11528 +11529 +11530 +11531 +11532 +11533 +11534 +11579 +11683 +11726 +11750 +11952 +12133 +12525 +12744 +12745 +12767 +12781 +12784 +12785 +12786 +12787 +12788 +12789 +12790 +12791 +12792 +12793 +12794 +12795 +12796 +12797 +12798 +12799 +12800 +12801 +12802 +12803 +12804 +12805 +12806 +12807 +12808 +12809 +12810 +12811 +12812 +12813 +12814 +12855 +12994 +13199 +13478 +13479 +13480 +13581 +13582 +13837 +13838 +13953 +13954 +13955 +13975 +13978 +14065 +14066 +14067 +14068 +14069 +14070 +14071 +14072 +14073 +14074 +14075 +14076 +14077 +14078 +14079 +14080 +14081 +14082 +14083 +14084 +14085 +14086 +14087 +14088 +14089 +14090 +14091 +14092 +14093 +14094 +14095 +14096 +14097 +14098 +14099 +14100 +14101 +14102 +14103 +14104 +14105 +14106 +14107 +14108 +14109 +14110 +14111 +14112 +14113 +14114 +14115 +14116 +14117 +14118 +14119 +14120 +14121 +14122 +14123 +14124 +14125 +14126 +14127 +14128 +14129 +14130 +14131 +14132 +14133 +14134 +14135 +14136 +14137 +14138 +14139 +14140 +14141 +14142 +14143 +14144 +14145 +14146 +14147 +14148 +14149 +14150 +14151 +14152 +14153 +14154 +14155 +14156 +14157 +14158 +14159 +14160 +14161 +14162 +14163 +14164 +14165 +14166 +14167 +14168 +14169 +14170 +14171 +14172 +14173 +14174 +14175 +14176 +14177 +14178 +14179 +14180 +14181 +14182 +14183 +14184 +14185 +14186 +14187 +14188 +14189 +14190 +14191 +14192 +14193 +14194 +14195 +14196 +14197 +14198 +14199 +14200 +14201 +14202 +14203 +14204 +14205 +14206 +14207 +14208 +14209 +14210 +14211 +14212 +14213 +14214 +14215 +14216 +14217 +14218 +14219 +14220 +14221 +14222 +14223 +14224 +14225 +14226 +14227 +14228 +14229 +14230 +14231 +14232 +14233 +14234 +14235 +14236 +14237 +14238 +14239 +14240 +14241 +14242 +14243 +14244 +14245 +14246 +14247 +14248 +14249 +14250 +14251 +14252 +14253 +14254 +14255 +14256 +14257 +14258 +14259 +14260 +14261 +14262 +14263 +14264 +14265 +14266 +14267 +14268 +14269 +14270 +14271 +14272 +14273 +14274 +14275 +14276 +14277 +14278 +14279 +14280 +14281 +14282 +14283 +14284 +14285 +14286 +14287 +14288 +14289 +14290 +14291 +14292 +14293 +14294 +14295 +14296 +14297 +14298 +14299 +14300 +14301 +14302 +14303 +14304 +14305 +14306 +14307 +14308 +14309 +14310 +14311 +14312 +14313 +14314 +14315 +14316 +14317 +14318 +14319 +14320 +14321 +14322 +14323 +14324 +14325 +14326 +14327 +14328 +14329 +14330 +14331 +14332 +14333 +14334 +14335 +14406 +14441 +14480 +14552 +14617 +14618 +14619 +14620 +14621 +14622 +14623 +14624 +14625 +14626 +14627 +14628 +14629 +14630 +14631 +14632 +14633 +14634 +14635 +14834 +15104 +15128 +15200 +15201 +15285 +15345 +15346 +15347 +15348 +15349 +15350 +15351 +15352 +15353 +15354 +15355 +15356 +15357 +15358 +15359 +15360 +15361 +15362 +15363 +15364 +15365 +15366 +15367 +15368 +15369 +15370 +15371 +15372 +15373 +15374 +15379 +15437 +15822 +15826 +15845 +15883 +15932 +15944 +16135 +16136 +16137 +16138 +16139 +16140 +16141 +16142 +16143 +16310 +16311 +16312 +16313 +16314 +16315 +16316 +16317 +16318 +16319 +16320 +16321 +16322 +16395 +16396 +16397 +16398 +16399 +16400 +16401 +16402 +16403 +16404 +16522 +16524 +16625 +16626 +16627 +16628 +16629 +16630 +16631 +16632 +16633 +16634 +16635 +16636 +16637 +16638 +16639 +16640 +16641 +16642 +16643 +16644 +16645 +16646 +16647 +16648 +16649 +16650 +16651 +16652 +16653 +16654 +16659 +17044 +17905 +17906 +17907 +17908 +17909 +17910 +17911 +17912 +17913 +17914 +17915 +17916 +17917 +17918 +17919 +17920 +17921 +17922 +17923 +17924 +17925 +17926 +17927 +17928 +17929 +17930 +17931 +17932 +17933 +17934 +17990 +18073 +18074 +18075 +18076 +18498 +18525 +18819 +18931 +18933 +18942 +19012 +19014 +19015 +19016 +19018 +19068 +19070 +19099 +19185 +19186 +19187 +19188 +19189 +19190 +19191 +19192 +19193 +19194 +19195 +19196 +19197 +19198 +19199 +19200 +19201 +19202 +19203 +19204 +19205 +19206 +19207 +19208 +19209 +19210 +19211 +19212 +19213 +19214 +19294 +19302 +19326 +19889 +19926 +19943 +19945 +19966 +20162 +20190 +20276 +20289 +20443 +20445 +20446 +20455 +20457 +20465 +20466 +20467 +20468 +20469 +20470 +20471 +20472 +20473 +20474 +20475 +20476 +20477 +20478 +20479 +20480 +20481 +20482 +20483 +20484 +20485 +20486 +20487 +20488 +20489 +20490 +20491 +20492 +20493 +20494 +20689 +21266 +21419 +21471 +21473 +21670 +21745 +21746 +21747 +21748 +21749 +21750 +21751 +21752 +21753 +21754 +21755 +21756 +21757 +21758 +21759 +21760 +21761 +21762 +21763 +21764 +21765 +21766 +21767 +21768 +21769 +21770 +21771 +21772 +21773 +21774 +21775 +21776 +21777 +21778 +21779 +21780 +21781 +21782 +21783 +21784 +21785 +21786 +21787 +21788 +21789 +21790 +21791 +21792 +21793 +21794 +21795 +21796 +21797 +21798 +21799 +21800 +21801 +21802 +21803 +21804 +21805 +21806 +21807 +21808 +21809 +21810 +21811 +21812 +21813 +21814 +21815 +21816 +21817 +21818 +21819 +21820 +21821 +21822 +21823 +21824 +21825 +21826 +21827 +21828 +21829 +21830 +21831 +21832 +21833 +21834 +21835 +21836 +21837 +21838 +21839 +21840 +21841 +21842 +21843 +21844 +21845 +21846 +21847 +21848 +21849 +21850 +21851 +21852 +21853 +21854 +21855 +21856 +21857 +21858 +21859 +21860 +21861 +21862 +21863 +21864 +21865 +21866 +21867 +21868 +21869 +21870 +21871 +21872 +21873 +21874 +21875 +21876 +21877 +21878 +21879 +21880 +21881 +21882 +21883 +21884 +21885 +21886 +21887 +21888 +21889 +21890 +21891 +21892 +21893 +21894 +21895 +21896 +21897 +21898 +21899 +21900 +21901 +21902 +21903 +21904 +21905 +21906 +21907 +21908 +21909 +21910 +21911 +21912 +21913 +21914 +21915 +21916 +21917 +21918 +21919 +21920 +21921 +21922 +21923 +21924 +21925 +21926 +21927 +21928 +21929 +21930 +21931 +21932 +21933 +21934 +21935 +21936 +21937 +21938 +21939 +21940 +21941 +21942 +21943 +21944 +21945 +21946 +21947 +21948 +21949 +21950 +21951 +21952 +21953 +21954 +21955 +21956 +21957 +21958 +21959 +21960 +21961 +21962 +21963 +21964 +21965 +21966 +21967 +21968 +21969 +21970 +21971 +21972 +21973 +21974 +21975 +21976 +21977 +21978 +21979 +21980 +21981 +21982 +21983 +21984 +21985 +21986 +21987 +21988 +21989 +21990 +21991 +21992 +21993 +21994 +21995 +21996 +21997 +21998 +21999 +22000 +22001 +22002 +22003 +22004 +22005 +22006 +22007 +22008 +22009 +22010 +22011 +22012 +22013 +22014 +22015 +22016 +22017 +22018 +22019 +22020 +22021 +22022 +22023 +22024 +22025 +22026 +22027 +22028 +22029 +22030 +22031 +22032 +22033 +22034 +22035 +22036 +22037 +22038 +22039 +22040 +22041 +22042 +22043 +22044 +22045 +22046 +22047 +22048 +22049 +22050 +22051 +22052 +22053 +22054 +22055 +22056 +22057 +22058 +22059 +22060 +22061 +22062 +22063 +22064 +22065 +22066 +22067 +22068 +22069 +22070 +22071 +22072 +22073 +22074 +22075 +22076 +22077 +22078 +22079 +22080 +22081 +22082 +22083 +22084 +22085 +22086 +22087 +22088 +22089 +22090 +22091 +22092 +22093 +22094 +22095 +22096 +22097 +22098 +22099 +22100 +22101 +22102 +22103 +22104 +22105 +22106 +22107 +22108 +22109 +22110 +22111 +22112 +22113 +22114 +22115 +22116 +22117 +22118 +22119 +22120 +22121 +22122 +22123 +22124 +22125 +22126 +22127 +22128 +22129 +22130 +22131 +22132 +22133 +22134 +22135 +22136 +22137 +22138 +22139 +22140 +22141 +22142 +22143 +22144 +22145 +22146 +22147 +22148 +22149 +22150 +22151 +22152 +22153 +22154 +22155 +22156 +22157 +22158 +22159 +22160 +22161 +22162 +22163 +22164 +22165 +22166 +22167 +22168 +22169 +22170 +22171 +22172 +22173 +22174 +22175 +22176 +22177 +22178 +22179 +22180 +22181 +22182 +22183 +22184 +22185 +22186 +22187 +22188 +22189 +22190 +22191 +22192 +22193 +22194 +22195 +22196 +22197 +22198 +22199 +22200 +22201 +22202 +22203 +22204 +22205 +22206 +22207 +22208 +22209 +22210 +22211 +22212 +22213 +22214 +22215 +22216 +22217 +22218 +22219 +22220 +22221 +22222 +22223 +22224 +22225 +22226 +22227 +22228 +22229 +22230 +22231 +22232 +22233 +22234 +22235 +22236 +22237 +22238 +22239 +22240 +22241 +22242 +22243 +22244 +22245 +22246 +22247 +22248 +22249 +22250 +22251 +22252 +22253 +22254 +22255 +22256 +22257 +22258 +22259 +22260 +22261 +22262 +22263 +22264 +22265 +22266 +22267 +22268 +22269 +22270 +22271 +22272 +22273 +22274 +22275 +22276 +22277 +22278 +22279 +22280 +22281 +22282 +22283 +22284 +22285 +22286 +22287 +22288 +22289 +22290 +22291 +22292 +22293 +22294 +22295 +22296 +22297 +22298 +22299 +22300 +22301 +22302 +22303 +22304 +22305 +22306 +22307 +22308 +22309 +22310 +22311 +22312 +22313 +22314 +22315 +22316 +22317 +22318 +22319 +22320 +22321 +22322 +22323 +22324 +22325 +22326 +22327 +22328 +22329 +22330 +22331 +22332 +22333 +22334 +22335 +22336 +22337 +22338 +22339 +22340 +22341 +22342 +22343 +22344 +22345 +22346 +22347 +22348 +22349 +22350 +22351 +22352 +22353 +22354 +22355 +22356 +22357 +22358 +22359 +22360 +22361 +22362 +22363 +22364 +22365 +22366 +22367 +22368 +22369 +22370 +22371 +22372 +22373 +22374 +22375 +22376 +22377 +22378 +22379 +22380 +22381 +22382 +22383 +22384 +22385 +22386 +22387 +22388 +22389 +22390 +22391 +22392 +22393 +22394 +22395 +22396 +22397 +22398 +22399 +22400 +22401 +22402 +22403 +22404 +22405 +22406 +22407 +22408 +22409 +22410 +22411 +22412 +22413 +22414 +22415 +22416 +22417 +22418 +22419 +22420 +22421 +22422 +22423 +22424 +22425 +22426 +22427 +22428 +22429 +22430 +22431 +22432 +22433 +22434 +22435 +22436 +22437 +22438 +22439 +22440 +22441 +22442 +22443 +22444 +22445 +22446 +22447 +22448 +22449 +22450 +22451 +22452 +22453 +22454 +22455 +22456 +22457 +22458 +22459 +22460 +22461 +22462 +22463 +22464 +22465 +22466 +22467 +22468 +22469 +22470 +22471 +22472 +22473 +22474 +22475 +22476 +22477 +22478 +22479 +22480 +22481 +22482 +22483 +22484 +22485 +22486 +22487 +22488 +22489 +22490 +22491 +22492 +22493 +22494 +22495 +22496 +22497 +22498 +22499 +22500 +22501 +22502 +22503 +22504 +22505 +22506 +22507 +22508 +22509 +22510 +22511 +22512 +22513 +22514 +22515 +22516 +22517 +22518 +22519 +22520 +22521 +22522 +22523 +22524 +22525 +22526 +22527 +22528 +22529 +22530 +22531 +22532 +22533 +22534 +22535 +22536 +22537 +22538 +22539 +22540 +22541 +22542 +22543 +22544 +22545 +22546 +22547 +22548 +22549 +22550 +22551 +22552 +22553 +22554 +22555 +22556 +22557 +22558 +22559 +22560 +22561 +22562 +22563 +22564 +22565 +22566 +22567 +22568 +22569 +22570 +22571 +22572 +22573 +22574 +22575 +22576 +22577 +22578 +22579 +22580 +22581 +22582 +22583 +22584 +22585 +22586 +22587 +22588 +22589 +22590 +22591 +22592 +22593 +22594 +22595 +22596 +22597 +22598 +22599 +22600 +22601 +22602 +22603 +22604 +22605 +22606 +22607 +22608 +22609 +22610 +22611 +22612 +22613 +22614 +22615 +22616 +22617 +22618 +22619 +22620 +22621 +22622 +22623 +22624 +22625 +22626 +22627 +22628 +22629 +22630 +22631 +22632 +22633 +22634 +22635 +22636 +22637 +22638 +22639 +22640 +22641 +22642 +22643 +22644 +22645 +22646 +22647 +22648 +22649 +22650 +22651 +22652 +22653 +22654 +22655 +22656 +22657 +22658 +22659 +22660 +22661 +22662 +22663 +22664 +22665 +22666 +22667 +22668 +22669 +22670 +22671 +22672 +22673 +22674 +22675 +22676 +22677 +22678 +22679 +22680 +22681 +22682 +22683 +22684 +22685 +22686 +22687 +22688 +22689 +22690 +22691 +22692 +22693 +22694 +22695 +22696 +22697 +22698 +22699 +22700 +22701 +22702 +22703 +22704 +22705 +22706 +22707 +22708 +22709 +22710 +22711 +22712 +22713 +22714 +22715 +22716 +22717 +22718 +22719 +22720 +22721 +22722 +22723 +22724 +22725 +22726 +22727 +22728 +22729 +22730 +22731 +22732 +22733 +22734 +22735 +22736 +22737 +22738 +22739 +22740 +22741 +22742 +22743 +22744 +22745 +22746 +22747 +22748 +22749 +22750 +22751 +22752 +22753 +22754 +22755 +22756 +22757 +22758 +22759 +22760 +22761 +22762 +22763 +22764 +22765 +22766 +22767 +22768 +22769 +22770 +22771 +22772 +22773 +22774 +22775 +22776 +22777 +22778 +22779 +22780 +22781 +22782 +22783 +22784 +22785 +22786 +22787 +22788 +22789 +22790 +22791 +22792 +22793 +22794 +22795 +22796 +22797 +22798 +22799 +22800 +22801 +22802 +22803 +22804 +22805 +22806 +22807 +22808 +22809 +22810 +22811 +22812 +22813 +22814 +22815 +22816 +22817 +22818 +22819 +22820 +22821 +22822 +22823 +22824 +22825 +22826 +22827 +22828 +22829 +22830 +22831 +22832 +22833 +22834 +22835 +22836 +22837 +22838 +22839 +22840 +22841 +22842 +22843 +22844 +22845 +22846 +22847 +22848 +22849 +22850 +22851 +22852 +22853 +22854 +22855 +22856 +22857 +22858 +22859 +22860 +22861 +22862 +22863 +22864 +22865 +22866 +22867 +22868 +22869 +22870 +22871 +22872 +22873 +22874 +22875 +22876 +22877 +22878 +22879 +22880 +22881 +22882 +22883 +22884 +22885 +22886 +22887 +22888 +22889 +22890 +22891 +22892 +22893 +22894 +22895 +22896 +22897 +22898 +22899 +22900 +22901 +22902 +22903 +22904 +22905 +22906 +22907 +22908 +22909 +22910 +22911 +22912 +22913 +22914 +22915 +22916 +22917 +22918 +22919 +22920 +22921 +22922 +22923 +22924 +22925 +22926 +22927 +22928 +22929 +22930 +22931 +22932 +22933 +22934 +22935 +22936 +22937 +22938 +22939 +22940 +22941 +22942 +22943 +22944 +22945 +22946 +22947 +22948 +22949 +22950 +22951 +22952 +22953 +22954 +22955 +22956 +22957 +22958 +22959 +22960 +22961 +22962 +22963 +22964 +22965 +22966 +22967 +22968 +22969 +22970 +22971 +22972 +22973 +22974 +22975 +22976 +22977 +22978 +22979 +22980 +22981 +22982 +22983 +22984 +22985 +22986 +22987 +22988 +22989 +22990 +22991 +22992 +22993 +22994 +22995 +22996 +22997 +22998 +22999 +23000 +23001 +23002 +23003 +23004 +23005 +23006 +23007 +23008 +23009 +23010 +23011 +23012 +23013 +23014 +23015 +23016 +23017 +23018 +23019 +23020 +23021 +23022 +23023 +23024 +23025 +23026 +23027 +23028 +23029 +23030 +23031 +23032 +23033 +23034 +23035 +23036 +23037 +23038 +23039 +23040 +23041 +23042 +23043 +23044 +23045 +23046 +23047 +23048 +23049 +23050 +23051 +23052 +23053 +23054 +23442 +23443 +23444 +23648 +23778 +24030 +24204 +24215 +24216 +24236 +24305 +24306 +24307 +24308 +24309 +24310 +24311 +24312 +24313 +24314 +24315 +24316 +24317 +24318 +24319 +24320 +24321 +24322 +24323 +24324 +24325 +24326 +24327 +24328 +24329 +24330 +24331 +24332 +24333 +24334 +25232 +25245 +25294 +25467 +25585 +25586 +25587 +25588 +25589 +25590 +25591 +25592 +25593 +25594 +25595 +25596 +25597 +25598 +25599 +25600 +25601 +25602 +25603 +25604 +25605 +25606 +25607 +25608 +25609 +25610 +25611 +25612 +25613 +25614 +25843 +25950 +26609 +26653 +26862 +26865 +26866 +26867 +26868 +26869 +26870 +26871 +26872 +26873 +26874 +26875 +26876 +26877 +26878 +26879 +26880 +26881 +26882 +26883 +26884 +26885 +26886 +26887 +26888 +26889 +26890 +26891 +26892 +26893 +26894 +27090 +27094 +27553 +27634 +27968 +28101 +28145 +28146 +28147 +28148 +28149 +28150 +28151 +28152 +28153 +28154 +28155 +28156 +28157 +28158 +28159 +28160 +28161 +28162 +28163 +28164 +28165 +28166 +28167 +28168 +28169 +28170 +28171 +28172 +28173 +28174 +28649 +28891 +29364 +29389 +29425 +29426 +29427 +29428 +29429 +29430 +29431 +29432 +29433 +29434 +29435 +29436 +29437 +29438 +29439 +29440 +29441 +29442 +29443 +29444 +29445 +29446 +29447 +29448 +29449 +29450 +29451 +29452 +29453 +29454 +29513 +29610 +29628 +29675 +29853 +30303 +30308 +30682 +30705 +30706 +30707 +30708 +30709 +30710 +30711 +30712 +30713 +30714 +30715 +30716 +30717 +30718 +30719 +30720 +30721 +30722 +30723 +30724 +30725 +30726 +30727 +30728 +30729 +30730 +30731 +30732 +30733 +30734 +30961 +31429 +31714 +31717 +31727 +31862 +31985 +31986 +31987 +31988 +31989 +31990 +31991 +31992 +31993 +31994 +31995 +31996 +31997 +31998 +31999 +32000 +32001 +32002 +32003 +32004 +32005 +32006 +32007 +32008 +32009 +32010 +32011 +32012 +32013 +32014 +32128 +32129 +32130 +32131 +32132 +32133 +32814 +32980 +33165 +33166 +33167 +33168 +33265 +33266 +33267 +33268 +33269 +33270 +33271 +33272 +33273 +33274 +33275 +33276 +33277 +33278 +33279 +33280 +33281 +33282 +33283 +33284 +33285 +33286 +33287 +33288 +33289 +33290 +33291 +33292 +33293 +33294 +33842 +33843 +34511 +34530 +34531 +34532 +34533 +34545 +34546 +34547 +34548 +34549 +34550 +34551 +34552 +34553 +34554 +34555 +34556 +34557 +34558 +34559 +34560 +34561 +34562 +34563 +34564 +34565 +34566 +34567 +34568 +34569 +34570 +34571 +34572 +34573 +34574 +34797 +34919 +35072 +35073 +35074 +35075 +35076 +35077 +35078 +35079 +35080 +35081 +35082 +35083 +35084 +35085 +35086 +35087 +35088 +35089 +35090 +35091 +35092 +35093 +35094 +35095 +35096 +35097 +35098 +35099 +35100 +35101 +35102 +35103 +35104 +35105 +35106 +35107 +35108 +35109 +35110 +35111 +35112 +35113 +35114 +35115 +35116 +35117 +35118 +35119 +35120 +35121 +35122 +35123 +35124 +35125 +35126 +35127 +35128 +35129 +35130 +35131 +35132 +35133 +35134 +35135 +35136 +35137 +35138 +35139 +35140 +35141 +35142 +35143 +35144 +35145 +35146 +35147 +35148 +35149 +35150 +35151 +35152 +35153 +35154 +35155 +35156 +35157 +35158 +35159 +35160 +35161 +35162 +35163 +35164 +35165 +35166 +35167 +35168 +35169 +35170 +35171 +35172 +35173 +35174 +35175 +35176 +35177 +35178 +35179 +35180 +35181 +35182 +35183 +35184 +35185 +35186 +35187 +35188 +35189 +35190 +35191 +35192 +35193 +35194 +35195 +35196 +35197 +35198 +35199 +35789 +35825 +35826 +35827 +35828 +35829 +35830 +35831 +35832 +35833 +35834 +35835 +35836 +35837 +35838 +35839 diff --git a/config/i11/mythen3_reduction_config.toml b/config/i11/mythen3_reduction_config.toml new file mode 100644 index 0000000..3426997 --- /dev/null +++ b/config/i11/mythen3_reduction_config.toml @@ -0,0 +1,192 @@ +### Notes: This is used to modify the data reduction for the mythen3 detector. +mythen3_detector_config = "/dls_sw/i11/software/mythen/mythen3.config" #used if number of active modules doesn't match data +active_modules = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] +#if there are less than the modules specified here ^ it will assume only ring 1 is active ie 0-13 +bad_modules = [11, 17, 24] #[19, 23] #modules that may be in the raw that are to be removed by the reduction process +bad_channel_masking = true #mask out the bad channels specified in the files below + +flatfield_filepath = "/dls_sw/i11/software/mythen3/diamond/flatfield/mythen3_1351666_1351675_flat.hdf5" +#"/dls_sw/i11/software/mythen3/diamond/flatfield/flatfield_2025-04-04.h5" # "/dls_sw/i11/software/mythen3/diamond/flatfield/flatfield_202503311536.h5" "/dls_sw/i11/software/mythen3/diamond/flatfield/flatField_15keV_th7500eV.h5" #location of flatfield, Current one is: "/dls_sw/i11/software/mythen3/diamond/flatfield/flatField_15keV_th7500eV.h5" #scotts flatdfield "/dls_sw/i11/software/mythen3/diamond/flatfield/flatField_15keV_th7500eV.h5" +apply_flatfield = false +modules_in_flatfield = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20] + +send_to_ispyb = true + +save_nxs_out = true +verbose_nxs = false +out_raw_data = false +debug_mode = true #this is for detector group to see all the data in it's full form, nothing removed, This will cause a seperate nxs to be saved, with the suffix _debug, and will save data parasitically and seperately from user data, THIS IS FOR SCOTT + +beam_energy = 15.0 #we could use this to calculate the diffraction pattern in Q space, or use a pv, or come up with something more clever ie auto Si refinment +save_in_Q_space = false #save a file where the diffraction pattern has been converted into Q, must know the beam energy somehow +rebin_step = 0.004 +default_counter = 0 #this specifies the type of threshold used internally by the detector, 0, 1 or 2, 0 = 7500 ev threshold +edge_bad_channels = 15 #number of channels that are bad at the edge of modules (5-15 are about right) +error_calc = "poisson" #this can be "poisson" "std_dev" or "max", poisson error is propagated poisson errors, std_dev is std_dev of counts in bin (will result in nan values if there is only 1 count in the bin), and "max" is the whichever is max for each bin + +### +# Note on errors, If you have peaks with weak intensity, a high spread of data (high noise), the error shouldn't be less than the spread even if +# poisson stats says it should have small error because there are few counts. +# But equally if you have very large peaks with low spread, the error should reflect that, The error is unlikely to be very small because large peaks have large poisson error +### + + +###### +data_reduction_mode = "step_scan" +# data_reduction_mode +#0 = step_scab (all data will be reduced into 1 file, possibly multiple angles) +#1 = time_resolved mode (many frames per .nxs saved into seperate .xye files for each frame) +#2 = pump_probe (all frames will be read and summed together - data has been taken at static angle, optimised for lots of frames) +###### + + +###### +# bad_dn.chans files are an ascii file specofying the bad channels numbers of each module, where each line specifies one bad channel 0-1279 +# ang_dn.off files specify the angular calibrations of each module, Determined experimentally and have 1 line with the format: +# module 1 offset 62.99916323710597 conv 6.568575932737774e-05 center 639.5 +###### + +bad_channels_filepath = "/workspaces/XRPD-Toolbox/config/i11/bad_channels.txt" #THIS SHOULD BE MOVED ALONG WITH EVERYTHING ELSE TO A CONSISTENT DIR! +angcal_filepath = "/dls_sw/i11/software/mythen3/diamond/ang_cal_171125_cen_639.5_leastsq.off" + +# [angular_calibrations] +# module_0 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d0.off" +# module_1 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d1.off" +# module_2 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d2.off" +# module_3 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d3.off" +# module_4 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d4.off" +# module_5 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d5.off" +# module_6 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d6.off" +# module_7 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d7.off" +# module_8 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d8.off" +# module_9 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d9.off" +# module_10 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d10.off" +# module_11 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d11.off" +# module_12 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d12.off" +# module_13 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d13.off" +# module_14 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d14.off" +# module_15 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d15.off" +# module_16 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d16.off" +# module_17 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d17.off" +# module_18 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d18.off" +# module_19 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d19.off" +# module_20 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d20.off" +# module_21 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d21.off" +# module_22 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d22.off" +# module_23 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d23.off" +# module_24 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d24.off" +# module_25 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d25.off" +# module_26 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d26.off" +# module_27 = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d27.off" + +# [module_0] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d0.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d0.off" + +# [module_1] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d1.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d1.off" + +# [module_2] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d2.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d2.off" + +# [module_3] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d3.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d3.off" + +# [module_4] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d4.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d4.off" + +# [module_5] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d5.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d5.off" + +# [module_6] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d6.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d6.off" + +# [module_7] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d7.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d7.off" + +# [module_8] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d8.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d8.off" + +# [module_9] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d9.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d9.off" + +# [module_10] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d10.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d10.off" + +# [module_11] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d11.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d11.off" + +# [module_12] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d12.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d12.off" + +# [module_13] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d13.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d13.off" + +# [module_14] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d14.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d14.off" + +# [module_15] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d15.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d15.off" + +# [module_16] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d16.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d16.off" + +# [module_17] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d17.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d17.off" + +# [module_18] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d18.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d18.off" + +# [module_19] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d19.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d19.off" + +# [module_20] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d20.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d20.off" + +# [module_21] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d21.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d21.off" + +# [module_22] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d22.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d22.off" + +# [module_23] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d23.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d23.off" + +# [module_24] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d24.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d24.off" + +# [module_25] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d25.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d25.off" + +# [module_26] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d26.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d26.off" + +# [module_27] +# bad_channels_path = "/dls_sw/i11/software/mythen3/diamond/calibration/bad_d27.chans" +# angular_calibration_path = "/dls_sw/i11/software/mythen3/diamond/calibration/ang_d27.off" diff --git a/pyproject.toml b/pyproject.toml index da479fd..acb91a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,9 +18,25 @@ dependencies = [ "matplotlib", "scipy", "pyfai", - "pandas", + "pydantic", + "numpydantic", "lmfit", + "pandas", "peakutils", + "PyCifRW", + "pyyaml", + "toml", + "PyQt6", + # "PyQt5", + "spglib", + "pymatgen", + "scikit-learn", + "Dans_Diffraction", + "stomp.py", + "numba", + "gql", + "ipywidgets", + ] # Add project dependencies here, e.g. ["click", "numpy"] dynamic = ["version"] license.file = "LICENSE" diff --git a/src/xrpd_toolbox/core.py b/src/xrpd_toolbox/core.py new file mode 100644 index 0000000..62fd7e2 --- /dev/null +++ b/src/xrpd_toolbox/core.py @@ -0,0 +1,724 @@ +from __future__ import annotations + +import json +import math +import tomllib +from collections.abc import Collection +from numbers import Real +from pathlib import Path +from typing import Annotated, Any, Literal, TypeAlias + +import matplotlib.pyplot as plt +import numpy as np +import toml +import yaml +from pydantic import ( + BaseModel, + BeforeValidator, + ConfigDict, + Field, + PlainSerializer, + model_serializer, + model_validator, +) + +SUPPORTED_FILE_TYPES = [".json", ".toml", ".yaml"] + +XUnit: TypeAlias = Literal["tth", "tof", "q", "d"] + +DataType: TypeAlias = Literal[ + "xray", + "lab-xray", + "tof-neutron", + "cw-neutron", +] + + +def to_ndarray(v): + if isinstance(v, np.ndarray): + return v + if isinstance(v, list): + return np.asarray(v) + return v + + +SerialisableNDArray = Annotated[ + np.ndarray, + BeforeValidator(to_ndarray), + PlainSerializer(lambda x: x.tolist(), return_type=list), +] + +SAFE_GLOBALS = { + "__builtins__": {}, + "abs": abs, + "sin": math.sin, + "cos": math.cos, + "tan": math.tan, + "sqrt": math.sqrt, + "log": math.log, + "exp": math.exp, +} + + +def safe_pow(a, b): + if abs(a) > 1e6 or abs(b) > 100: + raise ValueError("too large") + return a**b + + +def safe_exp(x): + if x > 700: # float overflow boundary + raise ValueError("exp too large") + return math.exp(x) + + +# replace the power to use safe_pow which should protect against CPU heavy operations +SAFE_GLOBALS["pow"] = safe_pow +SAFE_GLOBALS["exp"] = safe_exp + + +def evaluate_expression(expr: str, ctx: dict[str, float]) -> float: + """I realise this uses eval() which is discouraged, + but the other option is nasty, slower and adds bad complexity. + With the catches and by only using SAFE_GLOBALS and __builtins__ + - the risk is basically 0""" + + # prevents access to sub classes that could be dangerous to introspection attack + if "__" in expr or "." in expr: + raise ValueError("Disallowed expression") + + # prevents stupidly long expression which might take forever to parse + if len(expr) > 200: + raise ValueError("Expression too long") + + return float(eval(expr, SAFE_GLOBALS, ctx)) + + +class Parameter(BaseModel, Real): + value: float | int | str + refine: bool = True + bounds: list[float] = [-np.inf, np.inf] + + _name: str | None = None + _model: Any = None # back reference to RefinementBaseModel + + def _ctx(self) -> dict[str, float]: + """ + IMPORTANT: + Only uses RAW values, never float(v), never recursion. + """ + return {k: float(v.value) for k, v in self._model._params.items()} # noqa + + def _compute_value(self) -> float: + # print(self, self.value, "\n\n") + + if isinstance(self.value, (float, int)): + return float(self.value) + elif isinstance(self.value, str): + return evaluate_expression(self.value, self._ctx()) + else: + raise Exception() + + # helpers + def get_other_value(self, other: Parameter | int | float): + if isinstance(other, Parameter): + return other.value + else: + return other + + def __float__(self): + return self._compute_value() + + def _expr(self): + """formats the Parameter so that it shows as either + a number or _name in the expression""" + return self._name or str(self.value) + + def _to_expression(self, other, op: str): + # if isinstance(self.value, (int, float)) and isinstance(other, (int, float)): + # return Parameter(value=) + + if isinstance(other, Parameter): + return Parameter(value=f"({self._expr()} {op} {other._expr()})") # noqa + else: + return Parameter(value=f"({self._expr()} {op} {other})") + + # arithmetic + def __add__(self, other: int | float | Parameter): + if isinstance(self.value, (int, float)) and isinstance(other, (int, float)): + return self.value + other + else: + return self._to_expression(other, "+") + + def __radd__(self, other): + return self._to_expression(other, "+") + + def __sub__(self, other): + return self._to_expression(other, "-") + + def __rsub__(self, other): + return Parameter(value=f"({other} - {self._expr()})") + + def __mul__(self, other): + return self._to_expression(other, "*") + + def __rmul__(self, other): + return self._to_expression(other, "*") + + def __truediv__(self, other): + return self._to_expression(other, "/") + + def __rtruediv__(self, other): + return Parameter(value=f"({other} / {self._expr()})") + + def __floordiv__(self, other): + return self._to_expression(other, "//") + + def __rfloordiv__(self, other): + return Parameter(value=f"({other} // {self._expr()})") + + def __mod__(self, other): + return self._to_expression(other, "%") + + def __rmod__(self, other): + return Parameter(value=f"({other} % {self._expr()})") + + def __pow__(self, other): + return self._to_expression(other, "**") + + def __rpow__(self, other): + return Parameter(value=f"({other} ** {self._expr()})") + + # unary + def __neg__(self): + return Parameter(value=f"-({self._expr()})") + + def __abs__(self): + return Parameter(value=f"abs({self._expr()})") + + # comparisons + def __eq__(self, other): + return float(self) == float(other) + + def __lt__(self, other): + return float(self) < float(other) + + def __le__(self, other): + return float(self) <= float(other) + + def __gt__(self, other): + return float(self) > float(other) + + def __ge__(self, other): + return float(self) >= float(other) + + # Real interface + def __complex__(self): + return complex(float(self)) + + def __pos__(self): + return self + + # numeric + def __int__(self): + return int(float(self)) + + def __trunc__(self): + return int(float(self)) + + def __floor__(self): + return math.floor(float(self)) + + def __ceil__(self): + return math.ceil(float(self)) + + def __round__(self, n=None): + return round(float(self), n) + + def __array__(self): + return np.array([self._compute_value()], dtype=float) + + @property + def real(self): + return float(self) + + @property + def imag(self): + return 0 + + def conjugate(self): + return self + + def __divmod__(self, other): + return divmod(float(self), float(other)) + + def __rdivmod__(self, other): + return divmod(float(other), float(self)) + + +# class Parameter(BaseModel, Real): +# """A parameter acts like a value, that can be refined""" + +# value: float +# refine: bool = Field(default=True) +# bounds: list[float] = Field(default=[-np.inf, np.inf], repr=False) + +# def set_refine(self): +# self.refine = True + +# def dont_refine(self): +# self.refine = False + +# # helpers +# def get_other_value(self, other): +# if isinstance(other, Parameter): +# return other.value +# return other + +# def _op(self, other, fn): +# return fn(self.value, self.get_other_value(other)) + +# def _rop(self, other, fn): +# return fn(self.get_other_value(other), self.value) + +# # required conversions +# def __float__(self): +# return float(self.value) + +# def __int__(self): +# return int(self.value) + +# def __complex__(self): +# return complex(self.value) + +# # Real abstract methods +# def __trunc__(self): +# return math.trunc(self.value) + +# def __floor__(self): +# return math.floor(self.value) + +# def __ceil__(self): +# return math.ceil(self.value) + +# def __round__(self, ndigits=None): +# return round(self.value, ndigits) + +# # unary +# def __neg__(self): +# return -self.value + +# def __pos__(self): +# return +self.value + +# def __abs__(self): +# return abs(self.value) + +# # comparisons +# def __eq__(self, other): +# return self.value == self.get_other_value(other) + +# def __lt__(self, other): +# return self.value < self.get_other_value(other) + +# def __le__(self, other): +# return self.value <= self.get_other_value(other) + +# def __gt__(self, other): +# return self.value > self.get_other_value(other) + +# def __ge__(self, other): +# return self.value >= self.get_other_value(other) + +# # arithmetic +# def __add__(self, other): +# return self._op(other, operator.add) + +# def __radd__(self, other): +# return self._rop(other, operator.add) + +# def __sub__(self, other): +# return self._op(other, operator.sub) + +# def __rsub__(self, other): +# return self._rop(other, operator.sub) + +# def __mul__(self, other): +# return self._op(other, operator.mul) + +# def __rmul__(self, other): +# return self._rop(other, operator.mul) + +# def __truediv__(self, other): +# return self._op(other, operator.truediv) + +# def __rtruediv__(self, other): +# return self._rop(other, operator.truediv) + +# def __floordiv__(self, other): +# return self._op(other, operator.floordiv) + +# def __rfloordiv__(self, other): +# return self._rop(other, operator.floordiv) + +# def __mod__(self, other): +# return self._op(other, operator.mod) + +# def __rmod__(self, other): +# return self._rop(other, operator.mod) + +# def __pow__(self, other): +# return self._op(other, operator.pow) + +# def __rpow__(self, other): +# return self._rop(other, operator.pow) + +# # numpy support +# def __array__(self, dtype=float): +# return np.asarray(self.value, dtype=dtype) + +# def __array_priority__(self): +# return 1000 + +# def link(self, other: Parameter): +# """Use this to constrain two parmeters to be the same value +# custom_parameter = Parameter(value=5.5, refine=True) +# lattice.a.link(custom_parameter) +# """ +# self.value = other.value +# self.refine = other.refine +# self.refinable = other.refinable +# self.set_to = other.__name__ + + +# ParameterLike = int | float | Parameter +# FloatParameterLike = float | Parameter +# IntParameterLike = int | Parameter + + +class ParameterArray(BaseModel): + """Parameter array should be use for things that contain an array of coeeficients + see: Chebychev background""" + + parameter_array: list[Parameter] + + @model_serializer(mode="plain") + def serialize(self): + if not self.parameter_array: + return {} + + out = { + "value": [], + "refine": [], + "lower_bounds": [], + "upper_bounds": [], + } + + for p in self.parameter_array: + out["value"].append(p.value) + out["refine"].append(p.refine) + + lb, ub = p.bounds + out["lower_bounds"].append(lb) + out["upper_bounds"].append(ub) + + return out + + @model_validator(mode="before") + @classmethod + def deserialize(cls, data): + # already in internal format → do nothing + if "parameter_array" in data: + return data + + # transposed format → rebuild + if "value" in data: + n = len(data["value"]) + + params = [] + for i in range(n): + params.append( + Parameter( + value=data["value"][i], + refine=data.get("refine", [True] * n)[i], + bounds=[ + data["lower_bounds"][i], + data["upper_bounds"][i], + ], + ) + ) + + return {"parameter_array": params} + + return data + + def __getitem__(self, key: int | slice) -> Parameter | ParameterArray: + if isinstance(key, int): + return self.parameter_array[key] + elif isinstance(key, slice): + return ParameterArray(parameter_array=self.parameter_array[key]) + else: + raise TypeError(f"Invalid key: {key}") + + def __array__(self): + return np.array([f.value for f in self.parameter_array], dtype=float) + + @classmethod + def from_array(cls, array: np.ndarray | list[float | int], refine: bool = True): + return cls(parameter_array=[Parameter(value=f, refine=refine) for f in array]) + + +class XRPDBaseModel(BaseModel): + """The XRPDBaseModel should be used for anything that you want to be able to easily + serialised/deserialise from file but wont be used for a refinement.""" + + model_config = ConfigDict( + from_attributes=True, arbitrary_types_allowed=True, validate_assignment=True + ) + + @classmethod + def load_from_toml(cls, filepath: str | Path): + with open(filepath, "rb") as file: + settings_dict = tomllib.load(file) + + return cls.model_validate(settings_dict) + + @classmethod + def load_from_yaml(cls, filepath: str | Path): + with open(filepath, "rb") as file: + settings_dict = yaml.safe_load(file) + return cls.model_validate(settings_dict) + + @classmethod + def load_from_json(cls, filepath: str | Path): + with open(filepath, "rb") as file: + settings_dict = json.load(file) + return cls.model_validate(settings_dict) + + @classmethod + def load(cls, filepath: str | Path): + file_extension = Path(filepath).suffix + + if file_extension == ".json": + return cls.load_from_json(filepath) + elif file_extension == ".yaml": + return cls.load_from_yaml(filepath) + elif file_extension == ".toml": + return cls.load_from_toml(filepath) + else: + raise ValueError(f"Filetype must be: {SUPPORTED_FILE_TYPES}") + + def save_to_toml(self, filepath: str | Path) -> None: + if not str(filepath).endswith(".toml"): + raise ValueError("file_path name must end with .toml") + + print("Saving configuration to:", filepath) + + config_dict = self.model_dump() + + with open(filepath, "w") as outfile: + toml.dump(config_dict, outfile) + + def save_to_json(self, filepath: str | Path) -> None: + if not str(filepath).endswith(".json"): + raise ValueError("file_path name must end with .json") + + print("Saving configuration to:", filepath) + + config_dict = self.model_dump() + + with open(filepath, "w") as outfile: + json.dump(config_dict, outfile, indent=2, sort_keys=False) + + def save_to_yaml(self, file_path: str | Path) -> None: + if not str(file_path).endswith(".yaml"): + raise ValueError("file_path name must end with .yaml") + + print("Saving configuration to:", file_path) + + config_dict = self.model_dump() + + with open(file_path, "w") as outfile: + yaml.dump( + config_dict, + outfile, + default_flow_style=None, + sort_keys=False, + indent=2, + explicit_start=True, + ) + + def save(self, filepath: str | Path): + file_extension = Path(filepath).suffix + + if file_extension == ".json": + return self.save_to_json(filepath) + elif file_extension == ".yaml": + return self.save_to_yaml(filepath) + elif file_extension == ".toml": + return self.save_to_toml(filepath) + else: + raise ValueError(f"Filetype must be: {SUPPORTED_FILE_TYPES}") + + def __getitem__(self, name): + if name in type(self).model_fields: + value = getattr(self, name) + return value + else: + raise ValueError(f"{name} not in {self}") + + def __setitem__(self, name, value): + setattr(self, name, value) + + +class XYEData(XRPDBaseModel): + x: SerialisableNDArray = Field(repr=False) + y: SerialisableNDArray = Field(repr=False) + e: SerialisableNDArray | None = Field(default=None, repr=False) + x_unit: str = "index" + y_unit: str = "Intensity (Arb. Units)" + source: str | None = None # for tracking where the data came from + + @model_validator(mode="after") + def validate_data(self): + assert len(self.x) == len(self.y) + if self.e is not None: + assert len(self.x) == len(self.e) + + return self + + @classmethod + def from_csv(cls, filepath: str | Path): + try: + x, y, e = np.genfromtxt(str(filepath), unpack=True, dtype=float) + except ValueError: + x, y = np.genfromtxt(str(filepath), unpack=True, dtype=float) + e = None + + return cls(x=x, y=y, e=e, source=str(filepath)) + + def save_to_xye(self, filepath): + if self.e is None: + error = np.sqrt(self.y) + else: + error = self.e + + xye_out_data = np.stack((self.x, self.y, error), axis=-1) + + np.savetxt(filepath, xye_out_data, fmt="%.6f", delimiter=" ", newline="\n") + + +# TODO: Decide whether better to put x_unit into XYEData, remove generic ModelDataVar +# and then get data type from Radiation class - +# but the type of radiation is inherently linked to data... so multi phase/radia stuff +class ScatteringData(XYEData): + x_unit: XUnit = "tth" # type: ignore[override] + data_type: DataType = "xray" + wavelength: float | Parameter # for x-ray or CW neutron data + + @model_validator(mode="after") + def validate_data_units(self): + if self.data_type == "xray": + assert self.x_unit != "tof", "x_unit cannot be 'tof' for xray data" + + return self + + def plot(self, show: bool = True): + plt.figure(figsize=(16, 10)) + plt.errorbar(self.x, self.y, yerr=self.e, fmt="o", label="Data") + plt.xlabel(f"{self.x_unit}") + plt.ylabel("Intensity (a.u.)") + plt.title(f"Scattering Data ({self.data_type})") + + if show: + plt.legend() + plt.show() + + # If this doesn't accept the data format: + # I recommend using POWDLL to convert data to TOPAS style .xye format + @classmethod + def from_xye( + cls, + filepath: str | Path, + x_unit: XUnit, + data_type: DataType, + wavelength: float | Parameter, + ) -> ScatteringData: + """Loads scattering data from a CSV file. The file should have 3 (or 2) columns: + x, y and optionally e (error) + Equivalent the TOPAS xye format + """ + + if isinstance(wavelength, Parameter): + wavelength = wavelength + else: + wavelength = Parameter(value=wavelength, refine=False) + + try: + x, y, e = np.genfromtxt(str(filepath), unpack=True, dtype=float) + except ValueError: + x, y = np.genfromtxt(str(filepath), unpack=True, dtype=float) + e = None + + return cls( + x=x, + y=y, + e=e, + x_unit=x_unit, + data_type=data_type, + wavelength=wavelength, + source=str(filepath), + ) + + @classmethod + def from_fullprof( + cls, + filepath: str | Path, + x_unit: XUnit, + data_type: DataType, + wavelength: float | Parameter, + ) -> ScatteringData: + """Loads scattering data from a .xy or .dat file. + The file should have 3 columns x, y and error + Equivalent the fullprof INSTRM=10 format + """ + + if isinstance(wavelength, Parameter): + wavelength = wavelength + else: + wavelength = Parameter(value=wavelength, refine=False) + x, y, e = np.genfromtxt( + str(filepath), + skip_header=1, + comments="!", + unpack=True, + dtype=float, + ) + + return cls( + x=x, + y=y, + e=e, + x_unit=x_unit, + data_type=data_type, + wavelength=wavelength, + source=str(filepath), + ) + + +def check_parameters(maybe_parameters: Collection[Any]): + for maybe_parameter in maybe_parameters: + if not isinstance(maybe_parameter, Parameter): + raise ValueError(f"{maybe_parameter} is not a Parameter") + + +if __name__ == "__main__": + import numpy as np + + a = Parameter(value=3, refine=True) + + print(a) + + x = 1.0 + Parameter(value=3) + + print(x) diff --git a/src/xrpd_toolbox/data_loader.py b/src/xrpd_toolbox/data_loader.py new file mode 100644 index 0000000..4d20184 --- /dev/null +++ b/src/xrpd_toolbox/data_loader.py @@ -0,0 +1,92 @@ +from functools import cached_property +from pathlib import Path + +import numpy as np +from h5py import Dataset, File + +from xrpd_toolbox.utils.utils import get_entry, h5_to_array + + +def get_dataset(filepath, dataset_path: str) -> Dataset: + with File(filepath, "r") as file: + if dataset_path not in file: + raise ValueError(f"Dataset path {dataset_path} not found in {filepath}") + + data = file.get(dataset_path) + + if not isinstance(data, Dataset): + raise ValueError(f"{dataset_path} is not a dataset") + + return data + + +class BaseDataLoader: + """ + Base class for detector data loaders. + Handles Nexus/HDF5 access and metadata retrieval. + """ + + def __init__(self, filepath: str | Path, data_path: str): + self.filepath = Path(filepath) + self.data_path = data_path + + self.entry = get_entry(self.filepath) + self.dataset_path = f"/{self.entry}/{self.data_path}/data" + + def get_entries(self): + paths = [] + + with File(self.filepath, "r") as file: + file.visit(paths.append) + + return paths + + def get_data(self, dataset_path: str | None = None, selection=...) -> np.ndarray: + dataset_path = dataset_path or self.dataset_path + + with File(self.filepath, "r") as file: + if dataset_path not in file: + raise ValueError( + f"Dataset path {dataset_path} not found in {self.filepath}" + ) + + data = file.get(dataset_path) + + if data is None or not isinstance(data, Dataset): + raise ValueError(f"Data at {dataset_path} in {self.filepath} is None.") + + if data.ndim < 1: + raise ValueError("Data has insufficient dimensions.") + + return np.asarray(data[selection]) + + def sum_frames(self): + data = get_dataset(filepath=self.filepath, dataset_path=self.dataset_path) + + n_frames = data.shape[1] + + summed_images = [] + + for frame in range(n_frames): + frame_image = data[:, frame, :, :] + image_sum = np.sum(frame_image) + + summed_images.append(image_sum) + + summed_images = np.array(summed_images) + + return summed_images + + @property + def data(self) -> np.ndarray: + """Load the entire dataset.""" + return self.get_data() + + @cached_property + def durations(self) -> np.ndarray: + path = f"/{self.entry}/instrument/{self.data_path}/count_time" + return h5_to_array(self.filepath, path) + + def read_array(self, path: str) -> np.ndarray: + """Helper for reading arbitrary datasets.""" + return h5_to_array(self.filepath, path) diff --git a/src/xrpd_toolbox/i15-1/__init__.py b/src/xrpd_toolbox/fit_engine/__init__.py similarity index 100% rename from src/xrpd_toolbox/i15-1/__init__.py rename to src/xrpd_toolbox/fit_engine/__init__.py diff --git a/src/xrpd_toolbox/fit_engine/atom.py b/src/xrpd_toolbox/fit_engine/atom.py new file mode 100644 index 0000000..42caa5f --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/atom.py @@ -0,0 +1,74 @@ +import numpy as np + +from xrpd_toolbox.core import SerialisableNDArray, XRPDBaseModel + + +class Atom(XRPDBaseModel): + """This describes an atom""" + + label: str # elemnt label ie Si1 Si2 + element: str # element name eg Si + xyz: SerialisableNDArray # fractional coorindates of xyz #type: ignore + b_iso: float + occupancy: float = 1.0 + + @property + def x(self) -> float: + return float(self.xyz[0]) + + @property + def y(self) -> float: + return float(self.xyz[1]) + + @property + def z(self) -> float: + return float(self.xyz[2]) + + +class Atoms(XRPDBaseModel): + """This is the array version of atoms""" + + labels: SerialisableNDArray # element label ie Si1 Si2 + elements: SerialisableNDArray # element name eg Si + xyz: SerialisableNDArray # fractional coordinates of xyz + b_iso: SerialisableNDArray + occupancies: SerialisableNDArray + + def __getitem__(self, label_or_index: str | int) -> Atom: + if isinstance(label_or_index, int): + index = label_or_index + elif isinstance(label_or_index, str): + index = np.where(self.labels == label_or_index)[0][0] + else: + raise ValueError("label_or_index must be a string or an integer") + + label = self.labels[index] + element = self.elements[index] + xyz = self.xyz[index] + b_iso = self.b_iso[index] + occupancy = self.occupancies[index] + + return Atom( + label=label, + element=element, + xyz=xyz, + b_iso=b_iso, + occupancy=occupancy, + ) + + +if __name__ == "__main__": + # Example usage + atom = Atom( + label="Si1", + element="Si", + xyz=np.array([0.0, 0.0, 0.0]), + b_iso=1.0, + occupancy=1.0, + ) + + atoms = [atom, atom] + + positions = np.stack([a.xyz for a in atoms]) + + print(positions) diff --git a/src/xrpd_toolbox/fit_engine/background.py b/src/xrpd_toolbox/fit_engine/background.py new file mode 100644 index 0000000..edb6a7a --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/background.py @@ -0,0 +1,257 @@ +from __future__ import annotations + +from typing import Annotated, Literal + +import numpy as np +from pydantic import Field + +from xrpd_toolbox.core import ( + Parameter, + ParameterArray, + SerialisableNDArray, +) +from xrpd_toolbox.fit_engine.fitting_core import RefinementBaseModel + + +# TODO: Should we store x here too?; If so store it as private +class Background(RefinementBaseModel): + """This describes the background of a profile""" + + # _x: np.ndarray + + def calculate(self, x: np.ndarray) -> np.ndarray: + """Evaluate the background at the given x values""" + raise NotImplementedError( + "Must implement calculate method in Background subclass" + ) + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + **kwargs, + ) -> Background: + """Estimate the background from a profile by taking the minimum value of y""" + raise NotImplementedError( + "Must implement estimate method in Background subclass" + ) + + def __call__(self, x: np.ndarray) -> np.ndarray: + return self.calculate(x) + + +class ConstantBackground(Background): + """This describes a constant background""" + + background_type: Literal["ConstantBackground"] = "ConstantBackground" + value: float | Parameter = Parameter(value=0) + + def calculate(self, x: np.ndarray) -> np.ndarray: + return np.full_like(x, self.value) + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + **kwargs, + ) -> ConstantBackground: + """Estimate the background from a profile by taking the minimum value of y""" + value = np.min(y) + return cls(value=Parameter(value=value)) + + def __float__(self): + return float(self.value) + + +class LinearBackground(Background): + background_type: Literal["LinearBackground"] = "LinearBackground" + + slope: float | Parameter = Parameter(value=0) + intercept: float | Parameter = Parameter(value=0) + + def calculate(self, x: np.ndarray) -> np.ndarray: + return float(self.slope) * x + float(self.intercept) + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + **kwargs, + ) -> LinearBackground: + min_x = np.min(x) + max_x = np.max(x) + + min_y = np.min(y[x == min_x]) + max_y = np.min(y[x == max_x]) + + slope = (max_y - min_y) / (max_x - min_x) + intercept = min_y - slope * min_x + + return cls(slope=Parameter(value=slope), intercept=Parameter(value=intercept)) + + +class ChebyshevBackground(Background): + background_type: Literal["ChebyshevBackground"] = "ChebyshevBackground" + + """This describes a Chebyshev polynomial background - GSAS style""" + + coefficients: ( + SerialisableNDArray | ParameterArray + ) # coefficients of the Chebyshev polynomial + + def calculate(self, x: np.ndarray) -> np.ndarray: + return np.polynomial.chebyshev.chebval(x, self.coefficients) + + def add_coefficient(self, new_value: int | float = 0): + self.coefficients = np.append(self.coefficients, new_value) + + def remove_coefficient(self): + self.coefficients = self.coefficients[0:-1] # type: ignore - mypy is just being stupid here + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + degree: int = 8, + mask: bool = True, + mask_step: int = 50, + **kwargs, + ) -> ChebyshevBackground: + # this is a very simple estimation method that fits + # a Chebyshev polynomial to the data + + # select points evenly across the x range to fit the background + # - prevents peaks dominating the fit + + if mask: + selections_mask = np.arange( + 0, len(x), len(x) // mask_step + ) # select every mask_step points (20 by default) + + x_selected = x[selections_mask] + y_selected = y[selections_mask] + + else: + x_selected = x + y_selected = y + + coefficients = np.polynomial.chebyshev.chebfit( + x_selected, y_selected, deg=degree + ) + return cls(coefficients=coefficients) + + +class LinearInterpolationBackground(Background): + """This is a FullProfs style linear interpolation background + - also FullProfs default""" + + background_type: Literal["LinearInterpolationBackground"] = ( + "LinearInterpolationBackground" + ) + + x_sample: SerialisableNDArray = Field(repr=False) + y_sample: SerialisableNDArray | list[Parameter] | ParameterArray = Field(repr=False) + + def calculate(self, x: np.ndarray) -> np.ndarray: + return np.interp(x, self.x_sample, self.y_sample) + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + points: int = 20, + **kwargs, + ) -> LinearInterpolationBackground: + """simple estimate that takes a number of points equal to points, + spaced evenly across x""" + + # gradient = np.gradient(y, x) + # plt.plot(x, gradient) + # plt.show() + + indices = np.arange( + 0, len(x), len(x) // points + ) # select every mask_step points (20 by default) + + x_sample = x[indices] + y_sample = y[indices] + + y_sample_parameter = ParameterArray.from_array(y_sample, **kwargs) + + return cls(x_sample=x_sample, y_sample=y_sample_parameter) + + +class SplitBackground(Background): + """This background is basically two linear backgrounds, + that are split at some point. Before that point is use one background + and after that point it uses another""" + + background_type: Literal["SplitBackground"] = "SplitBackground" + split_index: int + value1: float | Parameter + value2: float | Parameter + + @classmethod + def estimate( + cls, + x: np.ndarray, + y: np.ndarray, + rtol: float = 0.1, + **kwargs, + ) -> SplitBackground: + y_min = float(np.min(y)) + threshold = 2.0 * np.abs(y_min) + + mask1 = np.isclose(y, y_min, rtol=rtol) + idx1 = np.flatnonzero(mask1) + + if idx1.size == 0: + # fallback: nearest to min + idx1 = np.argsort(np.abs(y - y_min))[:10] + + split_index = int(np.max(idx1)) + 1 + + value1 = float(np.mean(y[idx1])) + + valid = y >= threshold + + if np.any(valid): + candidates = y[valid] + min2 = float(np.min(candidates)) + + mask2 = np.isclose(y, min2, rtol=rtol) + idx2 = np.flatnonzero(mask2) + + if idx2.size == 0: + idx2 = np.argsort(np.abs(y - min2))[:10] + + value2 = float(np.mean(y[idx2])) + else: + # fallback: no values above threshold + value2 = value1 + + value1 = Parameter(value=value1) + value2 = Parameter(value=value2) + + return cls(split_index=split_index, value1=value1, value2=value2) + + def calculate(self, x: np.ndarray): + bg = np.empty_like(x, dtype=float) + bg[: self.split_index] = float(self.value1) + bg[self.split_index :] = float(self.value2) + return bg + + +BackgroundType = Annotated[ + ConstantBackground + | LinearBackground + | LinearInterpolationBackground + | ChebyshevBackground + | SplitBackground, + Field(discriminator="background_type"), +] diff --git a/src/xrpd_toolbox/fit_engine/constants.py b/src/xrpd_toolbox/fit_engine/constants.py new file mode 100644 index 0000000..190563f --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/constants.py @@ -0,0 +1,371 @@ +SPACEGROUP_NUMBER = { + "P1": 1, + "P-1": 2, + "P2": 3, + "P21": 4, + "C2": 5, + "Pm": 6, + "Pc": 7, + "Cm": 8, + "Cc": 9, + "P2/m": 10, + "P21/m": 11, + "C2/m": 12, + "P2/c": 13, + "P21/c": 14, + "C2/c": 15, + "P222": 16, + "P2221": 17, + "P21212": 18, + "P212121": 19, + "C2221": 20, + "C222": 21, + "F222": 22, + "I222": 23, + "I212121": 24, + "Pmm2": 25, + "Pmc21": 26, + "Pcc2": 27, + "Pma2": 28, + "Pca21": 29, + "Pnc2": 30, + "Pmn21": 31, + "Pba2": 32, + "Pna21": 33, + "Pnn2": 34, + "Cmm2": 35, + "Cmc21": 36, + "Ccc2": 37, + "Amm2": 38, + "Abm2": 39, + "Ama2": 40, + "Aba2": 41, + "Fmm2": 42, + "Fdd2": 43, + "Imm2": 44, + "Iba2": 45, + "Ima2": 46, + "Pmmm": 47, + "Pnnn": 48, + "Pccm": 49, + "Pban": 50, + "Pmma": 51, + "Pnna": 52, + "Pmna": 53, + "Pcca": 54, + "Pbam": 55, + "Pccn": 56, + "Pbcm": 57, + "Pnnm": 58, + "Pmmn": 59, + "Pbcn": 60, + "Pbca": 61, + "Pnma": 62, + "Cmcm": 63, + "Cmce": 64, + "Cmmm": 65, + "Cccm": 66, + "Cmme": 67, + "Ccce": 68, + "Fmmm": 69, + "Fddd": 70, + "Immm": 71, + "Ibam": 72, + "Ibca": 73, + "Imma": 74, + "P4": 75, + "P41": 76, + "P42": 77, + "P43": 78, + "I4": 79, + "I41": 80, + "P-4": 81, + "I-4": 82, + "P4/m": 83, + "P42/m": 84, + "P4/n": 85, + "P42/n": 86, + "I4/m": 87, + "I41/a": 88, + "P422": 89, + "P4212": 90, + "P4122": 91, + "P41212": 92, + "P4222": 93, + "P42212": 94, + "P4322": 95, + "P43212": 96, + "I422": 97, + "I4122": 98, + "P4mm": 99, + "P4bm": 100, + "P42cm": 101, + "P42nm": 102, + "P4cc": 103, + "P4nc": 104, + "P42mc": 105, + "P42bc": 106, + "I4mm": 107, + "I4cm": 108, + "I41md": 109, + "I41cd": 110, + "P-42m": 111, + "P-42c": 112, + "P-421m": 113, + "P-421c": 114, + "P-4m2": 115, + "P-4c2": 116, + "P-4b2": 117, + "P-4n2": 118, + "I-4m2": 119, + "I-4c2": 120, + "I-42m": 121, + "I-42d": 122, + "P4/mmm": 123, + "P4/mcc": 124, + "P4/nbm": 125, + "P4/nnc": 126, + "P4/mbm": 127, + "P4/mnc": 128, + "P4/nmm": 129, + "P4/ncc": 130, + "P42/mmc": 131, + "P42/mcm": 132, + "P42/nbc": 133, + "P42/nnm": 134, + "P42/mbc": 135, + "P42/mnm": 136, + "P42/nmc": 137, + "P42/ncm": 138, + "I4/mmm": 139, + "I4/mcm": 140, + "I41/amd": 141, + "I41/acd": 142, + "P3": 143, + "P31": 144, + "P32": 145, + "R3": 146, + "P-3": 147, + "R-3": 148, + "P312": 149, + "P321": 150, + "P3112": 151, + "P3121": 152, + "P3212": 153, + "P3221": 154, + "R32": 155, + "P3m1": 156, + "P31m": 157, + "P3c1": 158, + "P31c": 159, + "R3m": 160, + "R3c": 161, + "P-31m": 162, + "P-31c": 163, + "P-3m1": 164, + "P-3c1": 165, + "R-3m": 166, + "R-3c": 167, + "P6": 168, + "P61": 169, + "P6_5": 170, + "P62": 171, + "P64": 172, + "P63": 173, + "P-6": 174, + "P6/m": 175, + "P63/m": 176, + "P622": 177, + "P6122": 178, + "P6_522": 179, + "P6222": 180, + "P6422": 181, + "P6322": 182, + "P6mm": 183, + "P6cc": 184, + "P63cm": 185, + "P63mc": 186, + "P-6m2": 187, + "P-6c2": 188, + "P-62m": 189, + "P-62c": 190, + "P6/mmm": 191, + "P6/mcc": 192, + "P63/mcm": 193, + "P63/mmc": 194, + "P23": 195, + "F23": 196, + "I23": 197, + "P213": 198, + "I213": 199, + "Pm-3": 200, + "Pn-3": 201, + "Fm-3": 202, + "Fd-3": 203, + "Im-3": 204, + "Pa-3": 205, + "Ia-3": 206, + "P432": 207, + "P4232": 208, + "F432": 209, + "F4132": 210, + "I432": 211, + "P4332": 212, + "P4132": 213, + "I4132": 214, + "P-43m": 215, + "F-43m": 216, + "I-43m": 217, + "P-43n": 218, + "F-43c": 219, + "I-43d": 220, + "Pm-3m": 221, + "Pn-3n": 222, + "Pm-3n": 223, + "Pn-3m": 224, + "Fm-3m": 225, + "Fm-3c": 226, + "Fd-3m": 227, + "Fd-3c": 228, + "Im-3m": 229, + "Ia-3d": 230, +} + + +ELEMENT_ATOMIC_NUMBER = { + "H": 1, + "He": 2, + "Li": 3, + "Be": 4, + "B": 5, + "C": 6, + "N": 7, + "O": 8, + "F": 9, + "Ne": 10, + "Na": 11, + "Mg": 12, + "Al": 13, + "Si": 14, + "P": 15, + "S": 16, + "Cl": 17, + "Ar": 18, + "K": 19, + "Ca": 20, + "Sc": 21, + "Ti": 22, + "V": 23, + "Cr": 24, + "Mn": 25, + "Fe": 26, + "Co": 27, + "Ni": 28, + "Cu": 29, + "Zn": 30, + "Ga": 31, + "Ge": 32, + "As": 33, + "Se": 34, + "Br": 35, + "Kr": 36, + "Rb": 37, + "Sr": 38, + "Y": 39, + "Zr": 40, + "Nb": 41, + "Mo": 42, + "Tc": 43, + "Ru": 44, + "Rh": 45, + "Pd": 46, + "Ag": 47, + "Cd": 48, + "In": 49, + "Sn": 50, + "Sb": 51, + "Te": 52, + "I": 53, + "Xe": 54, + "Cs": 55, + "Ba": 56, + "La": 57, + "Ce": 58, + "Pr": 59, + "Nd": 60, + "Pm": 61, + "Sm": 62, + "Eu": 63, + "Gd": 64, + "Tb": 65, + "Dy": 66, + "Ho": 67, + "Er": 68, + "Tm": 69, + "Yb": 70, + "Lu": 71, + "Hf": 72, + "Ta": 73, + "W": 74, + "Re": 75, + "Os": 76, + "Ir": 77, + "Pt": 78, + "Au": 79, + "Hg": 80, + "Tl": 81, + "Pb": 82, + "Bi": 83, + "Po": 84, + "At": 85, + "Rn": 86, + "Fr": 87, + "Ra": 88, + "Ac": 89, + "Th": 90, + "Pa": 91, + "U": 92, + "Np": 93, + "Pu": 94, + "Am": 95, + "Cm": 96, + "Bk": 97, + "Cf": 98, + "Es": 99, + "Fm": 100, + "Md": 101, + "No": 102, + "Lr": 103, + "Rf": 104, + "Db": 105, + "Sg": 106, + "Bh": 107, + "Hs": 108, + "Mt": 109, + "Ds": 110, + "Rg": 111, + "Cn": 112, + "Nh": 113, + "Fl": 114, + "Mc": 115, + "Lv": 116, + "Ts": 117, + "Og": 118, +} + + +NUMBER_OF_SPACEGROUP = dict( + zip(SPACEGROUP_NUMBER.values(), SPACEGROUP_NUMBER.keys(), strict=True) +) + + +def get_element_number(element: str) -> int: + return ELEMENT_ATOMIC_NUMBER[element] + + +def get_spacegroup_number(spacegroup: str) -> int: + return SPACEGROUP_NUMBER[spacegroup] + + +def get_spacegroup_symbol(spacegroup_number: int) -> str: + return NUMBER_OF_SPACEGROUP[spacegroup_number] diff --git a/src/xrpd_toolbox/fit_engine/constants/atom_form_factors.csv b/src/xrpd_toolbox/fit_engine/constants/atom_form_factors.csv new file mode 100644 index 0000000..db3807a --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/constants/atom_form_factors.csv @@ -0,0 +1,212 @@ +Element a1 b1 a2 b2 a3 b3 a4 b4 c +H 0.489918 20.6593 0.262003 7.74039 0.196767 49.5519 0.049879 2.20159 0.001305 +H1- 0.897661 53.1368 0.565616 15.187 0.415815 186.576 0.116973 3.56709 0.002389 +He 0.8734 9.1037 0.6309 3.3568 0.3112 22.9276 0.178 0.9821 0.0064 +Li 1.1282 3.9546 0.7508 1.0524 0.6175 85.3905 0.4653 168.261 0.0377 +Li1+ 0.6968 4.6237 0.7888 1.9557 0.3414 0.6316 0.1563 10.0953 0.0167 +Be 1.5919 43.6427 1.1278 1.8623 0.5391 103.483 0.7029 0.542 0.0385 +Be2+ 6.2603 0.0027 0.8849 0.8313 0.7993 2.2758 0.1647 5.1146 -6.1092 +B 2.0545 23.2185 1.3326 1.021 1.0979 60.3498 0.7068 0.1403 -0.1932 +C 2.31 20.8439 1.02 10.2075 1.5886 0.5687 0.865 51.6512 0.2156 +Cval 2.26069 22.6907 1.56165 0.656665 1.05075 9.75618 0.839259 55.5949 0.286977 +N 12.2126 0.0057 3.1322 9.8933 2.0125 28.9975 1.1663 0.5826 -11.529 +O 3.0485 13.2771 2.2868 5.7011 1.5463 0.3239 0.867 32.9089 0.2508 +O1- 4.1916 12.8573 1.63969 4.17236 1.52673 47.0179 -20.307 -0.01404 21.9412 +F 3.5392 10.2825 2.6412 4.2944 1.517 0.2615 1.0243 26.1476 0.2776 +F1- 3.6322 5.27756 3.51057 14.7353 1.26064 0.442258 0.940706 47.3437 0.653396 +Ne 3.9553 8.4042 3.1125 3.4262 1.4546 0.2306 1.1251 21.7184 0.3515 +Na 4.7626 3.285 3.1736 8.8422 1.2674 0.3136 1.1128 129.424 0.676 +Na1+ 3.2565 2.6671 3.9362 6.1153 1.3998 0.2001 1.0032 14.039 0.404 +Mg 5.4204 2.8275 2.1735 79.2611 1.2269 0.3808 2.3073 7.1937 0.8584 +Mg2+ 3.4988 2.1676 3.8378 4.7542 1.3284 0.185 0.8497 10.1411 0.4853 +Al 6.4202 3.0387 1.9002 0.7426 1.5936 31.5472 1.9646 85.0886 1.1151 +Al3+ 4.17448 1.93816 3.3876 4.14553 1.20296 0.228753 0.528137 8.28524 0.706786 +Siv 6.2915 2.4386 3.0353 32.3337 1.9891 0.6785 1.541 81.6937 1.1407 +Sival 5.66269 2.6652 3.07164 38.6634 2.62446 0.916946 1.3932 93.5458 1.24707 +Si4+ 4.43918 1.64167 3.20345 3.43757 1.19453 0.2149 0.41653 6.65365 0.746297 +P 6.4345 1.9067 4.1791 27.157 1.78 0.526 1.4908 68.1645 1.1149 +S 6.9053 1.4679 5.2034 22.2151 1.4379 0.2536 1.5863 56.172 0.8669 +Cl 11.4604 0.0104 7.1964 1.1662 6.2556 18.5194 1.6455 47.7784 -9.5574 +Cl1- 18.2915 0.0066 7.2084 1.1717 6.5337 19.5424 2.3386 60.4486 -16.378 +Ar 7.4845 0.9072 6.7723 14.8407 0.6539 43.8983 1.6442 33.3929 1.4445 +K 8.2186 12.7949 7.4398 0.7748 1.0519 213.187 0.8659 41.6841 1.4228 +K1+ 7.9578 12.6331 7.4917 0.7674 6.359 -0.002 1.1915 31.9128 -4.9978 +Ca 8.6266 10.4421 7.3873 0.6599 1.5899 85.7484 1.0211 178.437 1.3751 +Ca2+ 15.6348 -0.0074 7.9518 0.6089 8.4372 10.3116 0.8537 25.9905 -14.875 +Sc 9.189 9.0213 7.3679 0.5729 1.6409 136.108 1.468 51.3531 1.3329 +Sc3+ 13.4008 0.29854 8.0273 7.9629 1.65943 -0.28604 1.57936 16.0662 -6.6667 +Ti 9.7595 7.8508 7.3558 0.5 1.6991 35.6338 1.9021 116.105 1.2807 +Ti2+ 9.11423 7.5243 7.62174 0.457585 2.2793 19.5361 0.087899 61.6558 0.897155 +Ti3+ 17.7344 0.22061 8.73816 7.04716 5.25691 -0.15762 1.92134 15.9768 -14.652 +Ti4+ 19.5114 0.178847 8.23473 6.67018 2.01341 -0.29263 1.5208 12.9464 -13.28 +V 10.2971 6.8657 7.3511 0.4385 2.0703 26.8938 2.0571 102.478 1.2199 +V2+ 10.106 6.8818 7.3541 0.4409 2.2884 20.3004 0.0223 115.122 1.2298 +V3+ 9.43141 6.39535 7.7419 0.383349 2.15343 15.1908 0.016865 63.969 0.656565 +V5+ 15.6887 0.679003 8.14208 5.40135 2.03081 9.97278 -9.576 0.940464 1.7143 +Cr 10.6406 6.1038 7.3537 0.392 3.324 20.2626 1.4922 98.7399 1.1832 +Cr2+ 9.54034 5.66078 7.7509 0.344261 3.58274 13.3075 0.509107 32.4224 0.616898 +Cr3+ 9.6809 5.59463 7.81136 0.334393 2.87603 12.8288 0.113575 32.8761 0.518275 +Mn 11.2819 5.3409 7.3573 0.3432 3.0193 17.8674 2.2441 83.7543 1.0896 +Mn2+ 10.8061 5.2796 7.362 0.3435 3.5268 14.343 0.2184 41.3235 1.0874 +Mn3+ 9.84521 4.91797 7.87194 0.294393 3.56531 10.8171 0.323613 24.1281 0.393974 +Mn4+ 9.96253 4.8485 7.97057 0.283303 2.76067 10.4852 0.054447 27.573 0.251877 +Fe 11.7695 4.7611 7.3573 0.3072 3.5222 15.3535 2.3045 76.8805 1.0369 +Fe2+ 11.0424 4.6538 7.374 0.3053 4.1346 12.0546 0.4399 31.2809 1.0097 +Fe3+ 11.1764 4.6147 7.3863 0.3005 3.3948 11.6729 0.0724 38.5566 0.9707 +Co 12.2841 4.2791 7.3409 0.2784 4.0034 13.5359 2.3488 71.1692 1.0118 +Co2+ 11.2296 4.1231 7.3883 0.2726 4.7393 10.2443 0.7108 25.6466 0.9324 +Co3+ 10.338 3.90969 7.88173 0.238668 4.76795 8.35583 0.725591 18.3491 0.286667 +Ni 12.8376 3.8785 7.292 0.2565 4.4438 12.1763 2.38 66.3421 1.0341 +Ni2+ 11.4166 3.6766 7.4005 0.2449 5.3442 8.873 0.9773 22.1626 0.8614 +Ni3+ 10.7806 3.5477 7.75868 0.22314 5.22746 7.64468 0.847114 16.9673 0.386044 +Cu 13.338 3.5828 7.1676 0.247 5.6158 11.3966 1.6735 64.8126 1.191 +Cu1+ 11.9475 3.3669 7.3573 0.2274 6.2455 8.6625 1.5578 25.8487 0.89 +Cu2+ 11.8168 3.37484 7.11181 0.244078 5.78135 7.9876 1.14523 19.897 1.14431 +Zn 14.0743 3.2655 7.0318 0.2333 5.1652 10.3163 2.41 58.7097 1.3041 +Zn2+ 11.9719 2.9946 7.3862 0.2031 6.4668 7.0826 1.394 18.0995 0.7807 +Ga 15.2354 3.0669 6.7006 0.2412 4.3591 10.7805 2.9623 61.4135 1.7189 +Ga3+ 12.692 2.81262 6.69883 0.22789 6.06692 6.36441 1.0066 14.4122 1.53545 +Ge 16.0816 2.8509 6.3747 0.2516 3.7068 11.4468 3.683 54.7625 2.1313 +Ge4+ 12.9172 2.53718 6.70003 0.205855 6.06791 5.47913 0.859041 11.603 1.45572 +As 16.6723 2.6345 6.0701 0.2647 3.4313 12.9479 4.2779 47.7972 2.531 +Se 17.0006 2.4098 5.8196 0.2726 3.9731 15.2372 4.3543 43.8163 2.8409 +Br 17.1789 2.1723 5.2358 16.5796 5.6377 0.2609 3.9851 41.4328 2.9557 +Br1- 17.1718 2.2059 6.3338 19.3345 5.5754 0.2871 3.7272 58.1535 3.1776 +Kr 17.3555 1.9384 6.7286 16.5623 5.5493 0.2261 3.5375 39.3972 2.825 +Rb 17.1784 1.7888 9.6435 17.3151 5.1399 0.2748 1.5292 164.934 3.4873 +Rb1+ 17.5816 1.7139 7.6598 14.7957 5.8981 0.1603 2.7817 31.2087 2.0782 +Sr 17.5663 1.5564 9.8184 14.0988 5.422 0.1664 2.6694 132.376 2.5064 +Sr2+ 18.0874 1.4907 8.1373 12.6963 2.5654 24.5651 -34.193 -0.0138 41.4025 +Y 17.776 1.4029 10.2946 12.8006 5.72629 0.125599 3.26588 104.354 1.91213 +Y3+ 17.9268 1.35417 9.1531 11.2145 1.76795 22.6599 -33.108 -0.01319 40.2602 +Zr 17.8765 1.27618 10.948 11.916 5.41732 0.117622 3.65721 87.6627 2.06929 +Zr4+ 18.1668 1.2148 10.0562 10.1483 1.01118 21.6054 -2.6479 -0.10276 9.41454 +Nb 17.6142 1.18865 12.0144 11.766 4.04183 0.204785 3.53346 69.7957 3.75591 +Nb3+ 19.8812 0.019175 18.0653 1.13305 11.0177 10.1621 1.94715 28.3389 -12.912 +Nb5+ 17.9163 1.12446 13.3417 0.028781 10.799 9.28206 0.337905 25.7228 -6.3934 +Mo 3.7025 0.2772 17.2356 1.0958 12.8876 11.004 3.7429 61.6584 4.3875 +Mo3+ 21.1664 0.014734 18.2017 1.03031 11.7423 9.53659 2.30951 26.6307 -14.421 +Mo5+ 21.0149 0.014345 18.0992 1.02238 11.4632 8.78809 0.740625 23.3452 -14.316 +Mo6+ 17.8871 1.03649 11.175 8.48061 6.57891 0.058881 0 0 0.344941 +Tc 19.1301 0.864132 11.0948 8.14487 4.64901 21.5707 2.71263 86.8472 5.40428 +Ru 19.2674 0.80852 12.9182 8.43467 4.86337 24.7997 1.56756 94.2928 5.37874 +Ru3+ 18.5638 0.847329 13.2885 8.37164 9.32602 0.017662 3.00964 22.887 -3.1892 +Ru4+ 18.5003 0.844582 13.1787 8.12534 4.71304 0.36495 2.18535 20.8504 1.42357 +Rh 19.2957 0.751536 14.3501 8.21758 4.73425 25.8749 1.28918 98.6062 5.328 +Rh3+ 18.8785 0.764252 14.1259 7.84438 3.32515 21.2487 -6.1989 -0.01036 11.8678 +Rh4+ 18.8545 0.760825 13.9806 7.62436 2.53464 19.3317 -5.6526 -0.0102 11.2835 +Pd 19.3319 0.698655 15.5017 7.98929 5.29537 25.2052 0.605844 76.8986 5.26593 +Pd2+ 19.1701 0.696219 15.2096 7.55573 4.32234 22.5057 0 0 5.2916 +Pd4+ 19.2493 0.683839 14.79 7.14833 2.89289 17.9144 -7.9492 0.005127 13.0174 +Ag 19.2808 0.6446 16.6885 7.4726 4.8045 24.6605 1.0463 99.8156 5.179 +Ag1+ 19.1812 0.646179 15.9719 7.19123 5.27475 21.7326 0.357534 66.1147 5.21572 +Ag2+ 19.1643 0.645643 16.2456 7.18544 4.3709 21.4072 0 0 5.21404 +Cd 19.2214 0.5946 17.6444 6.9089 4.461 24.7008 1.6029 87.4825 5.0694 +Cd2+ 19.1514 0.597922 17.2535 6.80639 4.47128 20.2521 0 0 5.11937 +In 19.1624 0.5476 18.5596 6.3776 4.2948 25.8499 2.0396 92.8029 4.9391 +In3+ 19.1045 0.551522 18.1108 6.3247 3.78897 17.3595 0 0 4.99635 +Sn 19.1889 5.8303 19.1005 0.5031 4.4585 26.8909 2.4663 83.9571 4.7821 +Sn2+ 19.1094 0.5036 19.0548 5.8378 4.5648 23.3752 0.487 62.2061 4.7861 +Sn4+ 18.9333 5.764 19.7131 0.4655 3.4182 14.0049 0.0193 -0.7583 3.9182 +Sb 19.6418 5.3034 19.0455 0.4607 5.0371 27.9074 2.6827 75.2825 4.5909 +Sb3+ 18.9755 0.467196 18.933 5.22126 5.10789 19.5902 0.288753 55.5113 4.69626 +Sb5+ 19.8685 5.44853 19.0302 0.467973 2.41253 14.1259 0 0 4.69263 +Te 19.9644 4.81742 19.0138 0.420885 6.14487 28.5284 2.5239 70.8403 4.352 +I 20.1472 4.347 18.9949 0.3814 7.5138 27.766 2.2735 66.8776 4.0712 +I1- 20.2332 4.3579 18.997 0.3815 7.8069 29.5259 2.8868 84.9304 4.0714 +Xe 20.2933 3.9282 19.0298 0.344 8.9767 26.4659 1.99 64.2658 3.7118 +Cs 20.3892 3.569 19.1062 0.3107 10.662 24.3879 1.4953 213.904 3.3352 +Cs1+ 20.3524 3.552 19.1278 0.3086 10.2821 23.7128 0.9615 59.4565 3.2791 +Ba 20.3361 3.216 19.297 0.2756 10.888 20.2073 2.6959 167.202 2.7731 +Ba2+ 20.1807 3.21367 19.1136 0.28331 10.9054 20.0558 0.77634 51.746 3.02902 +La 20.578 2.94817 19.599 0.244475 11.3727 18.7726 3.28719 133.124 2.14678 +La3+ 20.2489 2.9207 19.3763 0.250698 11.6323 17.8211 0.336048 54.9453 2.4086 +Ce 21.1671 2.81219 19.7695 0.226836 11.8513 17.6083 3.33049 127.113 1.86264 +Ce3+ 20.8036 2.77691 19.559 0.23154 11.9369 16.5408 0.612376 43.1692 2.09013 +Ce4+ 20.3235 2.65941 19.8186 0.21885 12.1233 15.7992 0.144583 62.2355 1.5918 +Pr 22.044 2.77393 19.6697 0.222087 12.3856 16.7669 2.82428 143.644 2.0583 +Pr3+ 21.3727 2.6452 19.7491 0.214299 12.1329 15.323 0.97518 36.4065 1.77132 +Pr4+ 20.9413 2.54467 20.0539 0.202481 12.4668 14.8137 0.296689 45.4643 1.24285 +Nd 22.6845 2.66248 19.6847 0.210628 12.774 15.885 2.85137 137.903 1.98486 +Nd3+ 21.961 2.52722 19.9339 0.199237 12.12 14.1783 1.51031 30.8717 1.47588 +Pm 23.3405 2.5627 19.6095 0.202088 13.1235 15.1009 2.87516 132.721 2.02876 +Pm3+ 22.5527 2.4174 20.1108 0.185769 12.0671 13.1275 2.07492 27.4491 1.19499 +Sm 24.0042 2.47274 19.4258 0.196451 13.4396 14.3996 2.89604 128.007 2.20963 +Sm3+ 23.1504 2.31641 20.2599 0.174081 11.9202 12.1571 2.71488 24.8242 0.954586 +Eu 24.6274 2.3879 19.0886 0.1942 13.7603 13.7546 2.9227 123.174 2.5745 +Eu2+ 24.0063 2.27783 19.9504 0.17353 11.8034 11.6096 3.87243 26.5156 1.36389 +Eu3+ 23.7497 2.22258 20.3745 0.16394 11.8509 11.311 3.26503 22.9966 0.759344 +Gd 25.0709 2.25341 19.0798 0.181951 13.8518 12.9331 3.54545 101.398 2.4196 +Gd3+ 24.3466 2.13553 20.4208 0.155525 11.8708 10.5782 3.7149 21.7029 0.645089 +Tb 25.8976 2.24256 18.2185 0.196143 14.3167 12.6648 2.95354 115.362 3.58324 +Tb3+ 24.9559 2.05601 20.3271 0.149525 12.2471 10.0499 3.773 21.2773 0.691967 +Dy 26.507 2.1802 17.6383 0.202172 14.5596 12.1899 2.96577 111.874 4.29728 +Dy3+ 25.5395 1.9804 20.2861 0.143384 11.9812 9.34972 4.50073 19.581 0.68969 +Ho 26.9049 2.07051 17.294 0.19794 14.5583 11.4407 3.63837 92.6566 4.56796 +Ho3+ 26.1296 1.91072 20.0994 0.139358 11.9788 8.80018 4.93676 18.5908 0.852795 +Er 27.6563 2.07356 16.4285 0.223545 14.9779 11.3604 2.98233 105.703 5.92046 +Er3+ 26.722 1.84659 19.7748 0.13729 12.1506 8.36225 5.17379 17.8974 1.17613 +Tm 28.1819 2.02859 15.8851 0.238849 15.1542 10.9975 2.98706 102.961 6.75621 +Tm3+ 27.3083 1.78711 19.332 0.136974 12.3339 7.96778 5.38348 17.2922 1.63929 +Yb 28.6641 1.9889 15.4345 0.257119 15.3087 10.6647 2.98963 100.417 7.56672 +Yb2+ 28.1209 1.78503 17.6817 0.15997 13.3335 8.18304 5.14657 20.39 3.70983 +Yb3+ 27.8917 1.73272 18.7614 0.13879 12.6072 7.64412 5.47647 16.8153 2.26001 +Lu 28.9476 1.90182 15.2208 9.98519 15.1 0.261033 3.71601 84.3298 7.97628 +Lu3+ 28.4628 1.68216 18.121 0.142292 12.8429 7.33727 5.59415 16.3535 2.97573 +Hf 29.144 1.83262 15.1726 9.5999 14.7586 0.275116 4.30013 72.029 8.58154 +Hf4+ 28.8131 1.59136 18.4601 0.128903 12.7285 6.76232 5.59927 14.0366 2.39699 +Ta 29.2024 1.77333 15.2293 9.37046 14.5135 0.295977 4.76492 63.3644 9.24354 +Ta5+ 29.1587 1.50711 18.8407 0.116741 12.8268 6.31524 5.38695 12.4244 1.78555 +W 29.0818 1.72029 15.43 9.2259 14.4327 0.321703 5.11982 57.056 9.8875 +W6+ 29.4936 1.42755 19.3763 0.104621 13.0544 5.93667 5.06412 11.1972 1.01074 +Re 28.7621 1.67191 15.7189 9.09227 14.5564 0.3505 5.44174 52.0861 10.472 +Os 28.1894 1.62903 16.155 8.97948 14.9305 0.382661 5.67589 48.1647 11.0005 +Os4+ 30.419 1.37113 15.2637 6.84706 14.7458 0.165191 5.06795 18.003 6.49804 +Ir 27.3049 1.59279 16.7296 8.86553 15.6115 0.417916 5.83377 45.0011 11.4722 +Ir3+ 30.4156 1.34323 15.862 7.10909 13.6145 0.204633 5.82008 20.3254 8.27903 +Ir4+ 30.7058 1.30923 15.5512 6.71983 14.2326 0.167252 5.53672 17.4911 6.96824 +Pt 27.0059 1.51293 17.7639 8.81174 15.7131 0.424593 5.7837 38.6103 11.6883 +Pt2+ 29.8429 1.32927 16.7224 7.38979 13.2153 0.263297 6.35234 22.9426 9.85329 +Pt4+ 30.9612 1.24813 15.9829 6.60834 13.7348 0.16864 5.92034 16.9392 7.39534 +Au 16.8819 0.4611 18.5913 8.6216 25.5582 1.4826 5.86 36.3956 12.0658 +Au1+ 28.0109 1.35321 17.8204 7.7395 14.3359 0.356752 6.58077 26.4043 11.2299 +Au3+ 30.6886 1.2199 16.9029 6.82872 12.7801 0.212867 6.52354 18.659 9.0968 +Hg 20.6809 0.545 19.0417 8.4484 21.6575 1.5729 5.9676 38.3246 12.6089 +Hg1+ 25.0853 1.39507 18.4973 7.65105 16.8883 0.443378 6.48216 28.2262 12.0205 +Hg2+ 29.5641 1.21152 18.06 7.05639 12.8374 0.284738 6.89912 20.7482 10.6268 +Tl 27.5446 0.65515 19.1584 8.70751 15.538 1.96347 5.52593 45.8149 13.1746 +Tl1+ 21.3985 1.4711 20.4723 0.517394 18.7478 7.43463 6.82847 28.8482 12.5258 +Tl3+ 30.8695 1.1008 18.3481 6.53852 11.9328 0.219074 7.00574 17.2114 9.8027 +Pb 31.0617 0.6902 13.0637 2.3576 18.442 8.618 5.9696 47.2579 13.4118 +Pb2+ 21.7886 1.3366 19.5682 0.488383 19.1406 6.7727 7.01107 23.8132 12.4734 +Pb4+ 32.1244 1.00566 18.8003 6.10926 12.0175 0.147041 6.96886 14.714 8.08428 +Bi 33.3689 0.704 12.951 2.9238 16.5877 8.7937 6.4692 48.0093 13.5782 +Bi3+ 21.8053 1.2356 19.5026 6.24149 19.1053 0.469999 7.10295 20.3185 12.4711 +Bi5+ 33.5364 0.91654 25.0946 0.39042 19.2497 5.71414 6.91555 12.8285 -6.7994 +Po 34.6726 0.700999 15.4733 3.55078 13.1138 9.55642 7.02588 47.0045 13.677 +At 35.3163 0.68587 19.0211 3.97458 9.49887 11.3824 7.42518 45.4715 13.7108 +Rn 35.5631 0.6631 21.2816 4.0691 8.0037 14.0422 7.4433 44.2473 13.6905 +Fr 35.9299 0.646453 23.0547 4.17619 12.1439 23.1052 2.11253 150.645 13.7247 +Ra 35.763 0.616341 22.9064 3.87135 12.4739 19.9887 3.21097 142.325 13.6211 +Ra2+ 35.215 0.604909 21.67 3.5767 7.91342 12.601 7.65078 29.8436 13.5431 +Ac 35.6597 0.589092 23.1032 3.65155 12.5977 18.599 4.08655 117.02 13.5266 +Ac3+ 35.1736 0.579689 22.1112 3.41437 8.19216 12.9187 7.05545 25.9443 13.4637 +Th 35.5645 0.563359 23.4219 3.46204 12.7473 17.8309 4.80703 99.1722 13.4314 +Th4+ 35.1007 0.555054 22.4418 3.24498 9.78554 13.4661 5.29444 23.9533 13.376 +Pa 35.8847 0.547751 23.2948 3.41519 14.1891 16.9235 4.17287 105.251 13.4287 +U 36.0228 0.5293 23.4128 3.3253 14.9491 16.0927 4.188 100.613 13.3966 +U3+ 35.5747 0.52048 22.5259 3.12293 12.2165 12.7148 5.37073 26.3394 13.3092 +U4+ 35.3715 0.516598 22.5326 3.05053 12.0291 12.5723 4.7984 23.4582 13.2671 +U6+ 34.8509 0.507079 22.7584 2.8903 14.0099 13.1767 1.21457 25.2017 13.1665 +Np 36.1874 0.511929 23.5964 3.25396 15.6402 15.3622 4.1855 97.4908 13.3573 +Np3+ 35.7074 0.502322 22.613 3.03807 12.9898 12.1449 5.43227 25.4928 13.2544 +Np4+ 35.5103 0.498626 22.5787 2.96627 12.7766 11.9484 4.92159 22.7502 13.2116 +Np6+ 35.0136 0.48981 22.7286 2.81099 14.3884 12.33 1.75669 22.6581 13.113 +Pu 36.5254 0.499384 23.8083 3.26371 16.7707 14.9455 3.47947 105.98 13.3812 +Pu3+ 35.84 0.484938 22.7169 2.96118 13.5807 11.5331 5.66016 24.3992 13.1991 +Pu4+ 35.6493 0.481422 22.646 2.8902 13.3595 11.316 5.18831 21.8301 13.1555 +Pu6+ 35.1736 0.473204 22.7181 2.73848 14.7635 11.553 2.28678 20.9303 13.0582 +Am 36.6706 0.483629 24.0992 3.20647 17.3415 14.3136 3.49331 102.273 13.3592 +Cm 36.6488 0.465154 24.4096 3.08997 17.399 13.4346 4.21665 88.4834 13.2887 +Bk 36.7881 0.451018 24.7736 3.04619 17.8919 12.8946 4.23284 86.003 13.2754 +Cf 36.9185 0.437533 25.1995 3.00775 18.3317 12.4044 4.24391 83.7881 13.2674 diff --git a/src/xrpd_toolbox/fit_engine/constants/international_tables_of_crystallography.yaml b/src/xrpd_toolbox/fit_engine/constants/international_tables_of_crystallography.yaml new file mode 100644 index 0000000..f753f68 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/constants/international_tables_of_crystallography.yaml @@ -0,0 +1,3404 @@ +--- +spacegroups: + P1: + spacegroup: P1 + crystal_class: triclinic + hall: ' P 1' + hermann_mauguin: P 1 + symops: ['x,y,z'] + ncsym: ['x,y,z'] + number: 1 + schoenflies: C1^1 + universal_h_m: P 1 + P-1: + spacegroup: P-1 + crystal_class: triclinic + hall: -P 1 + hermann_mauguin: P -1 + symops: ['x,y,z', '-x,-y,-z'] + ncsym: ['x,y,z', '-x,-y,-z'] + number: 2 + schoenflies: Ci^1 + universal_h_m: P -1 + P2: + spacegroup: P2 + crystal_class: monoclinic + hall: ' P 2y' + hermann_mauguin: P 1 2 1 + symops: ['x,y,z', '-x,y,-z'] + ncsym: ['x,y,z', '-x,y,-z'] + number: 3 + schoenflies: C2^1 + universal_h_m: P 1 2 1 + P21: + spacegroup: P21 + crystal_class: monoclinic + hall: ' P 2yb' + hermann_mauguin: P 1 21 1 + symops: ['x,y,z', '-x,y+0.5,-z'] + ncsym: ['x,y,z', '-x,y+0.5,-z'] + number: 4 + schoenflies: C2^2 + universal_h_m: P 1 21 1 + C2: + spacegroup: C2 + crystal_class: monoclinic + hall: ' C 2y' + hermann_mauguin: C 1 2 1 + symops: ['x,y,z', '-x,y,-z', 'x+0.5,y+0.5,z', '-x+0.5,y+0.5,-z'] + ncsym: ['x,y,z', '-x,y,-z'] + number: 5 + schoenflies: C2^3 + universal_h_m: C 1 2 1 + Pm: + spacegroup: Pm + crystal_class: monoclinic + hall: ' P -2y' + hermann_mauguin: P 1 m 1 + symops: ['x,y,z', 'x,-y,z'] + ncsym: ['x,y,z', 'x,-y,z'] + number: 6 + schoenflies: Cs^1 + universal_h_m: P 1 m 1 + Pc: + spacegroup: Pc + crystal_class: monoclinic + hall: ' P -2yc' + hermann_mauguin: P 1 c 1 + symops: ['x,y,z', 'x,-y,z+0.5'] + ncsym: ['x,y,z', 'x,-y,z+0.5'] + number: 7 + schoenflies: Cs^2 + universal_h_m: P 1 c 1 + Cm: + spacegroup: Cm + crystal_class: monoclinic + hall: ' C -2y' + hermann_mauguin: C 1 m 1 + symops: ['x,y,z', 'x,-y,z', 'x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', 'x,-y,z'] + number: 8 + schoenflies: Cs^3 + universal_h_m: C 1 m 1 + Cc: + spacegroup: Cc + crystal_class: monoclinic + hall: ' C -2yc' + hermann_mauguin: C 1 c 1 + symops: ['x,y,z', 'x,-y,z+0.5', 'x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', 'x,-y,z+0.5'] + number: 9 + schoenflies: Cs^4 + universal_h_m: C 1 c 1 + P2/m: + spacegroup: P2/m + crystal_class: monoclinic + hall: -P 2y + hermann_mauguin: P 1 2/m 1 + symops: ['x,y,z', '-x,y,-z', '-x,-y,-z', 'x,-y,z'] + ncsym: ['x,y,z', '-x,y,-z', '-x,-y,-z', 'x,-y,z'] + number: 10 + schoenflies: C2h^1 + universal_h_m: P 1 2/m 1 + P21/m: + spacegroup: P21/m + crystal_class: monoclinic + hall: -P 2yb + hermann_mauguin: P 1 21/m 1 + symops: ['x,y,z', '-x,y+0.5,-z', '-x,-y,-z', 'x,-y-0.5,z'] + ncsym: ['x,y,z', '-x,y+0.5,-z', '-x,-y,-z', 'x,-y-0.5,z'] + number: 11 + schoenflies: C2h^2 + universal_h_m: P 1 21/m 1 + C2/m: + spacegroup: C2/m + crystal_class: monoclinic + hall: -C 2y + hermann_mauguin: C 1 2/m 1 + symops: ['x,y,z', '-x,y,-z', '-x,-y,-z', 'x,-y,z', 'x+0.5,y+0.5,z', '-x+0.5,y+0.5,-z', + '-x+0.5,-y+0.5,-z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,y,-z', '-x,-y,-z', 'x,-y,z'] + number: 12 + schoenflies: C2h^3 + universal_h_m: C 1 2/m 1 + P2/c: + spacegroup: P2/c + crystal_class: monoclinic + hall: -P 2yc + hermann_mauguin: P 1 2/c 1 + symops: ['x,y,z', '-x,y,-z+0.5', '-x,-y,-z', 'x,-y,z-0.5'] + ncsym: ['x,y,z', '-x,y,-z+0.5', '-x,-y,-z', 'x,-y,z-0.5'] + number: 13 + schoenflies: C2h^4 + universal_h_m: P 1 2/c 1 + P21/c: + spacegroup: P21/c + crystal_class: monoclinic + hall: -P 2ybc + hermann_mauguin: P 1 21/c 1 + symops: ['x,y,z', '-x,y+0.5,-z+0.5', '-x,-y,-z', 'x,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x,y+0.5,-z+0.5', '-x,-y,-z', 'x,-y-0.5,z-0.5'] + number: 14 + schoenflies: C2h^5 + universal_h_m: P 1 21/c 1 + C2/c: + spacegroup: C2/c + crystal_class: monoclinic + hall: -C 2yc + hermann_mauguin: C 1 2/c 1 + symops: ['x,y,z', '-x,y,-z+0.5', '-x,-y,-z', 'x,-y,z-0.5', 'x+0.5,y+0.5,z', '-x+0.5,y+0.5,-z+0.5', + '-x+0.5,-y+0.5,-z', 'x+0.5,-y+0.5,z-0.5'] + ncsym: ['x,y,z', '-x,y,-z+0.5', '-x,-y,-z', 'x,-y,z-0.5'] + number: 15 + schoenflies: C2h^6 + universal_h_m: C 1 2/c 1 + P222: + spacegroup: P222 + crystal_class: orthorhombic + hall: ' P 2 2' + hermann_mauguin: P 2 2 2 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z'] + number: 16 + schoenflies: D2^1 + universal_h_m: P 2 2 2 + P2221: + spacegroup: P2221 + crystal_class: orthorhombic + hall: ' P 2c 2' + hermann_mauguin: P 2 2 21 + symops: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5'] + number: 17 + schoenflies: D2^2 + universal_h_m: P 2 2 21 + P21212: + spacegroup: P21212 + crystal_class: orthorhombic + hall: ' P 2 2ab' + hermann_mauguin: P 21 21 2 + symops: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z'] + ncsym: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z'] + number: 18 + schoenflies: D2^3 + universal_h_m: P 21 21 2 + P212121: + spacegroup: P212121 + crystal_class: orthorhombic + hall: ' P 2ac 2ab' + hermann_mauguin: P 21 21 21 + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5'] + number: 19 + schoenflies: D2^4 + universal_h_m: P 21 21 21 + C2221: + spacegroup: C2221 + crystal_class: orthorhombic + hall: ' C 2c 2' + hermann_mauguin: C 2 2 21 + symops: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z+0.5', + 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z+0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5'] + number: 20 + schoenflies: D2^5 + universal_h_m: C 2 2 21 + C222: + spacegroup: C222 + crystal_class: orthorhombic + hall: ' C 2 2' + hermann_mauguin: C 2 2 2 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', + 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z'] + number: 21 + schoenflies: D2^6 + universal_h_m: C 2 2 2 + F222: + spacegroup: F222 + crystal_class: orthorhombic + hall: ' F 2 2' + hermann_mauguin: F 2 2 2 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', 'x+0.5,y,z+0.5', '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', + '-x+0.5,y,-z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z'] + number: 22 + schoenflies: D2^7 + universal_h_m: F 2 2 2 + I222: + spacegroup: I222 + crystal_class: orthorhombic + hall: ' I 2 2' + hermann_mauguin: I 2 2 2 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'x+0.5,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z'] + number: 23 + schoenflies: D2^8 + universal_h_m: I 2 2 2 + I212121: + spacegroup: I212121 + crystal_class: orthorhombic + hall: ' I 2b 2c' + hermann_mauguin: I 21 21 21 + symops: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', 'x+0.5,y+0.5,z+0.5', + '-x+0.5,-y+1,z+0.5', 'x+0.5,-y+0.5,-z+1', '-x+0.5,y+1,-z+1'] + ncsym: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5'] + number: 24 + schoenflies: D2^9 + universal_h_m: I 21 21 21 + Pmm2: + spacegroup: Pmm2 + crystal_class: orthorhombic + hall: ' P 2 -2' + hermann_mauguin: P m m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + number: 25 + schoenflies: C2v^1 + universal_h_m: P m m 2 + Pmc21: + spacegroup: Pmc21 + crystal_class: orthorhombic + hall: ' P 2c -2' + hermann_mauguin: P m c 21 + symops: ['x,y,z', '-x,-y,z+0.5', '-x,y,z', 'x,-y,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', '-x,y,z', 'x,-y,z+0.5'] + number: 26 + schoenflies: C2v^2 + universal_h_m: P m c 21 + Pcc2: + spacegroup: Pcc2 + crystal_class: orthorhombic + hall: ' P 2 -2c' + hermann_mauguin: P c c 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5'] + number: 27 + schoenflies: C2v^3 + universal_h_m: P c c 2 + Pma2: + spacegroup: Pma2 + crystal_class: orthorhombic + hall: ' P 2 -2a' + hermann_mauguin: P m a 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z'] + number: 28 + schoenflies: C2v^4 + universal_h_m: P m a 2 + Pca21: + spacegroup: Pca21 + crystal_class: orthorhombic + hall: ' P 2c -2ac' + hermann_mauguin: P c a 21 + symops: ['x,y,z', '-x,-y,z+0.5', '-x+0.5,y,z+0.5', 'x+0.5,-y,z'] + ncsym: ['x,y,z', '-x,-y,z+0.5', '-x+0.5,y,z+0.5', 'x+0.5,-y,z'] + number: 29 + schoenflies: C2v^5 + universal_h_m: P c a 21 + Pnc2: + spacegroup: Pnc2 + crystal_class: orthorhombic + hall: ' P 2 -2bc' + hermann_mauguin: P n c 2 + symops: ['x,y,z', '-x,-y,z', '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5'] + number: 30 + schoenflies: C2v^6 + universal_h_m: P n c 2 + Pmn21: + spacegroup: Pmn21 + crystal_class: orthorhombic + hall: ' P 2ac -2' + hermann_mauguin: P m n 21 + symops: ['x,y,z', '-x+0.5,-y,z+0.5', '-x,y,z', 'x+0.5,-y,z+0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', '-x,y,z', 'x+0.5,-y,z+0.5'] + number: 31 + schoenflies: C2v^7 + universal_h_m: P m n 21 + Pba2: + spacegroup: Pba2 + crystal_class: orthorhombic + hall: ' P 2 -2ab' + hermann_mauguin: P b a 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + number: 32 + schoenflies: C2v^8 + universal_h_m: P b a 2 + Pna21: + spacegroup: Pna21 + crystal_class: orthorhombic + hall: ' P 2c -2n' + hermann_mauguin: P n a 21 + symops: ['x,y,z', '-x,-y,z+0.5', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z+0.5', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z'] + number: 33 + schoenflies: C2v^9 + universal_h_m: P n a 21 + Pnn2: + spacegroup: Pnn2 + crystal_class: orthorhombic + hall: ' P 2 -2n' + hermann_mauguin: P n n 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + number: 34 + schoenflies: C2v^10 + universal_h_m: P n n 2 + Cmm2: + spacegroup: Cmm2 + crystal_class: orthorhombic + hall: ' C 2 -2' + hermann_mauguin: C m m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', + '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + number: 35 + schoenflies: C2v^11 + universal_h_m: C m m 2 + Cmc21: + spacegroup: Cmc21 + crystal_class: orthorhombic + hall: ' C 2c -2' + hermann_mauguin: C m c 21 + symops: ['x,y,z', '-x,-y,z+0.5', '-x,y,z', 'x,-y,z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z+0.5', + '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', '-x,y,z', 'x,-y,z+0.5'] + number: 36 + schoenflies: C2v^12 + universal_h_m: C m c 21 + Ccc2: + spacegroup: Ccc2 + crystal_class: orthorhombic + hall: ' C 2 -2c' + hermann_mauguin: C c c 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', + '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5'] + number: 37 + schoenflies: C2v^13 + universal_h_m: C c c 2 + Amm2: + spacegroup: Amm2 + crystal_class: orthorhombic + hall: ' A 2 -2' + hermann_mauguin: A m m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + number: 38 + schoenflies: C2v^14 + universal_h_m: A m m 2 + Abm2: + spacegroup: Abm2 + crystal_class: orthorhombic + hall: ' A 2 -2b' + hermann_mauguin: A e m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y+0.5,z', 'x,-y+0.5,z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + '-x,y+1,z+0.5', 'x,-y+1,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y+0.5,z', 'x,-y+0.5,z'] + number: 39 + schoenflies: C2v^15 + universal_h_m: A e m 2 + Ama2: + spacegroup: Ama2 + crystal_class: orthorhombic + hall: ' A 2 -2a' + hermann_mauguin: A m a 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z'] + number: 40 + schoenflies: C2v^16 + universal_h_m: A m a 2 + Aba2: + spacegroup: Aba2 + crystal_class: orthorhombic + hall: ' A 2 -2ab' + hermann_mauguin: A e a 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z', 'x,y+0.5,z+0.5', + '-x,-y+0.5,z+0.5', '-x+0.5,y+1,z+0.5', 'x+0.5,-y+1,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + number: 41 + schoenflies: C2v^17 + universal_h_m: A e a 2 + Fmm2: + spacegroup: Fmm2 + crystal_class: orthorhombic + hall: ' F 2 -2' + hermann_mauguin: F m m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5', 'x+0.5,y,z+0.5', '-x+0.5,-y,z+0.5', '-x+0.5,y,z+0.5', + 'x+0.5,-y,z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + number: 42 + schoenflies: C2v^18 + universal_h_m: F m m 2 + Fdd2: + spacegroup: Fdd2 + crystal_class: orthorhombic + hall: ' F 2 -2d' + hermann_mauguin: F d d 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.25,y+0.25,z+0.25', 'x+0.75,-y+0.75,z+0.25', + 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', '-x+0.25,y+0.75,z+0.75', 'x+0.75,-y+1.25,z+0.75', + 'x+0.5,y,z+0.5', '-x+0.5,-y,z+0.5', '-x+0.75,y+0.25,z+0.75', 'x+1.25,-y+0.75,z+0.75', + 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', '-x+0.75,y+0.75,z+0.25', 'x+1.25,-y+1.25,z+0.25'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.25,y+0.25,z+0.25', 'x+0.75,-y+0.75,z+0.25'] + number: 43 + schoenflies: C2v^19 + universal_h_m: F d d 2 + Imm2: + spacegroup: Imm2 + crystal_class: orthorhombic + hall: ' I 2 -2' + hermann_mauguin: I m m 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z', 'x,-y,z'] + number: 44 + schoenflies: C2v^20 + universal_h_m: I m m 2 + Iba2: + spacegroup: Iba2 + crystal_class: orthorhombic + hall: ' I 2 -2c' + hermann_mauguin: I b a 2 + symops: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5', 'x+0.5,y+0.5,z+0.5', + '-x+0.5,-y+0.5,z+0.5', '-x+0.5,y+0.5,z+1', 'x+0.5,-y+0.5,z+1'] + ncsym: ['x,y,z', '-x,-y,z', '-x,y,z+0.5', 'x,-y,z+0.5'] + number: 45 + schoenflies: C2v^21 + universal_h_m: I b a 2 + Ima2: + spacegroup: Ima2 + crystal_class: orthorhombic + hall: ' I 2 -2a' + hermann_mauguin: I m a 2 + symops: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z', 'x+0.5,y+0.5,z+0.5', + '-x+0.5,-y+0.5,z+0.5', '-x+1,y+0.5,z+0.5', 'x+1,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', '-x+0.5,y,z', 'x+0.5,-y,z'] + number: 46 + schoenflies: C2v^22 + universal_h_m: I m a 2 + Pmmm: + spacegroup: Pmmm + crystal_class: orthorhombic + hall: -P 2 2 + hermann_mauguin: P m m m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z'] + number: 47 + schoenflies: D2h^1 + universal_h_m: P m m m + Pnnn: + spacegroup: Pnnn + crystal_class: orthorhombic + hall: ' P 2 2 -1n' + hermann_mauguin: P n n n + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5'] + number: 48 + schoenflies: D2h^2 + universal_h_m: P n n n :1 + Pccm: + spacegroup: Pccm + crystal_class: orthorhombic + hall: -P 2 2c + hermann_mauguin: P c c m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5'] + number: 49 + schoenflies: D2h^3 + universal_h_m: P c c m + Pban: + spacegroup: Pban + crystal_class: orthorhombic + hall: ' P 2 2 -1ab' + hermann_mauguin: P b a n + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z', + '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z', + '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + number: 50 + schoenflies: D2h^4 + universal_h_m: P b a n :1 + Pmma: + spacegroup: Pmma + crystal_class: orthorhombic + hall: -P 2a 2a + hermann_mauguin: P m m a + symops: ['x,y,z', '-x+0.5,-y,z', 'x+0.5,-y,-z', '-x,y,-z', '-x,-y,-z', 'x-0.5,y,-z', + '-x-0.5,y,z', 'x,-y,z'] + ncsym: ['x,y,z', '-x+0.5,-y,z', 'x+0.5,-y,-z', '-x,y,-z', '-x,-y,-z', 'x-0.5,y,-z', + '-x-0.5,y,z', 'x,-y,z'] + number: 51 + schoenflies: D2h^5 + universal_h_m: P m m a + Pnna: + spacegroup: Pnna + crystal_class: orthorhombic + hall: -P 2a 2bc + hermann_mauguin: P n n a + symops: ['x,y,z', '-x+0.5,-y,z', 'x,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z', '-x,y-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z', 'x,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z', '-x,y-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5'] + number: 52 + schoenflies: D2h^6 + universal_h_m: P n n a + Pmna: + spacegroup: Pmna + crystal_class: orthorhombic + hall: -P 2ac 2 + hermann_mauguin: P m n a + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x,-y,-z', '-x+0.5,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x,y,z', 'x-0.5,-y,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x,-y,-z', '-x+0.5,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x,y,z', 'x-0.5,-y,z-0.5'] + number: 53 + schoenflies: D2h^7 + universal_h_m: P m n a + Pcca: + spacegroup: Pcca + crystal_class: orthorhombic + hall: -P 2a 2ac + hermann_mauguin: P c c a + symops: ['x,y,z', '-x+0.5,-y,z', 'x+0.5,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z', '-x-0.5,y,z-0.5', 'x,-y,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z', 'x+0.5,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z', '-x-0.5,y,z-0.5', 'x,-y,z-0.5'] + number: 54 + schoenflies: D2h^8 + universal_h_m: P c c a + Pbam: + spacegroup: Pbam + crystal_class: orthorhombic + hall: -P 2 2ab + hermann_mauguin: P b a m + symops: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x,-y,-z', + 'x,y,-z', '-x-0.5,y-0.5,z', 'x-0.5,-y-0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x,-y,-z', + 'x,y,-z', '-x-0.5,y-0.5,z', 'x-0.5,-y-0.5,z'] + number: 55 + schoenflies: D2h^9 + universal_h_m: P b a m + Pccn: + spacegroup: Pccn + crystal_class: orthorhombic + hall: -P 2ab 2ac + hermann_mauguin: P c c n + symops: ['x,y,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y,-z+0.5', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y-0.5,-z', '-x-0.5,y,z-0.5', 'x,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y,-z+0.5', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y-0.5,-z', '-x-0.5,y,z-0.5', 'x,-y-0.5,z-0.5'] + number: 56 + schoenflies: D2h^10 + universal_h_m: P c c n + Pbcm: + spacegroup: Pbcm + crystal_class: orthorhombic + hall: -P 2c 2b + hermann_mauguin: P b c m + symops: ['x,y,z', '-x,-y,z+0.5', 'x,-y+0.5,-z', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y,-z-0.5', '-x,y-0.5,z', 'x,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', 'x,-y+0.5,-z', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y,-z-0.5', '-x,y-0.5,z', 'x,-y-0.5,z-0.5'] + number: 57 + schoenflies: D2h^11 + universal_h_m: P b c m + Pnnm: + spacegroup: Pnnm + crystal_class: orthorhombic + hall: -P 2 2n + hermann_mauguin: P n n m + symops: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y,-z', '-x-0.5,y-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y,-z', '-x-0.5,y-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5'] + number: 58 + schoenflies: D2h^12 + universal_h_m: P n n m + Pmmn: + spacegroup: Pmmn + crystal_class: orthorhombic + hall: ' P 2 2ab -1ab' + hermann_mauguin: P m m n + symops: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x+0.5,-y+0.5,-z', + 'x+0.5,y+0.5,-z', '-x,y,z', 'x,-y,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x+0.5,-y+0.5,-z', + 'x+0.5,y+0.5,-z', '-x,y,z', 'x,-y,z'] + number: 59 + schoenflies: D2h^13 + universal_h_m: P m m n :1 + Pbcn: + spacegroup: Pbcn + crystal_class: orthorhombic + hall: -P 2n 2ab + hermann_mauguin: P b c n + symops: ['x,y,z', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y-0.5,-z-0.5', '-x-0.5,y-0.5,z', 'x,-y,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y-0.5,-z-0.5', '-x-0.5,y-0.5,z', 'x,-y,z-0.5'] + number: 60 + schoenflies: D2h^14 + universal_h_m: P b c n + Pbca: + spacegroup: Pbca + crystal_class: orthorhombic + hall: -P 2ac 2ab + hermann_mauguin: P b c a + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z', 'x,-y-0.5,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z', 'x,-y-0.5,z-0.5'] + number: 61 + schoenflies: D2h^15 + universal_h_m: P b c a + Pnma: + spacegroup: Pnma + crystal_class: orthorhombic + hall: -P 2ac 2n + hermann_mauguin: P n m a + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z+0.5', '-x,y+0.5,-z', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z-0.5', 'x,-y-0.5,z'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z+0.5', '-x,y+0.5,-z', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z-0.5', 'x,-y-0.5,z'] + number: 62 + schoenflies: D2h^16 + universal_h_m: P n m a + Cmcm: + spacegroup: Cmcm + crystal_class: orthorhombic + hall: -C 2c 2 + hermann_mauguin: C m c m + symops: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z-0.5', + '-x,y,z', 'x,-y,z-0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z', + '-x+0.5,y+0.5,-z+0.5', '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z-0.5', '-x+0.5,y+0.5,z', + 'x+0.5,-y+0.5,z-0.5'] + ncsym: ['x,y,z', '-x,-y,z+0.5', 'x,-y,-z', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z-0.5', + '-x,y,z', 'x,-y,z-0.5'] + number: 63 + schoenflies: D2h^17 + universal_h_m: C m c m + Cmce: + spacegroup: Cmce + crystal_class: orthorhombic + hall: -C 2ac 2 + hermann_mauguin: C m c e + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x,-y,-z', '-x+0.5,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x,y,z', 'x-0.5,-y,z-0.5', 'x+0.5,y+0.5,z', '-x+1,-y+0.5,z+0.5', + 'x+0.5,-y+0.5,-z', '-x+1,y+0.5,-z+0.5', '-x+0.5,-y+0.5,-z', 'x,y+0.5,-z-0.5', + '-x+0.5,y+0.5,z', 'x,-y+0.5,z-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x,-y,-z', '-x+0.5,y,-z+0.5', '-x,-y,-z', + 'x-0.5,y,-z-0.5', '-x,y,z', 'x-0.5,-y,z-0.5'] + number: 64 + schoenflies: D2h^18 + universal_h_m: C m c e + Cmmm: + spacegroup: Cmmm + crystal_class: orthorhombic + hall: -C 2 2 + hermann_mauguin: C m m m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', + '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z'] + number: 65 + schoenflies: D2h^19 + universal_h_m: C m m m + Cccm: + spacegroup: Cccm + crystal_class: orthorhombic + hall: -C 2 2c + hermann_mauguin: C c c m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z+0.5', + '-x+0.5,y+0.5,-z+0.5', '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z', '-x+0.5,y+0.5,z-0.5', + 'x+0.5,-y+0.5,z-0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5'] + number: 66 + schoenflies: D2h^20 + universal_h_m: C c c m + Cmme: + spacegroup: Cmme + crystal_class: orthorhombic + hall: -C 2a 2 + hermann_mauguin: C m m a + symops: ['x,y,z', '-x+0.5,-y,z', 'x,-y,-z', '-x+0.5,y,-z', '-x,-y,-z', 'x-0.5,y,-z', + '-x,y,z', 'x-0.5,-y,z', 'x+0.5,y+0.5,z', '-x+1,-y+0.5,z', 'x+0.5,-y+0.5,-z', + '-x+1,y+0.5,-z', '-x+0.5,-y+0.5,-z', 'x,y+0.5,-z', '-x+0.5,y+0.5,z', 'x,-y+0.5,z'] + ncsym: ['x,y,z', '-x+0.5,-y,z', 'x,-y,-z', '-x+0.5,y,-z', '-x,-y,-z', 'x-0.5,y,-z', + '-x,y,z', 'x-0.5,-y,z'] + number: 67 + schoenflies: D2h^21 + universal_h_m: C m m a + Ccce: + spacegroup: Ccce + crystal_class: orthorhombic + hall: ' C 2 2 -1ac' + hermann_mauguin: C c c e + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y,-z+0.5', 'x+0.5,y,-z+0.5', + '-x+0.5,y,z+0.5', 'x+0.5,-y,z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', + '-x+0.5,y+0.5,-z', '-x+1,-y+0.5,-z+0.5', 'x+1,y+0.5,-z+0.5', '-x+1,y+0.5,z+0.5', + 'x+1,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.5,-y,-z+0.5', 'x+0.5,y,-z+0.5', + '-x+0.5,y,z+0.5', 'x+0.5,-y,z+0.5'] + number: 68 + schoenflies: D2h^22 + universal_h_m: C c c e :1 + Fmmm: + spacegroup: Fmmm + crystal_class: orthorhombic + hall: -F 2 2 + hermann_mauguin: F m m m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', + '-x,-y+0.5,-z+0.5', 'x,y+0.5,-z+0.5', '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5', 'x+0.5,y,z+0.5', + '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', '-x+0.5,y,-z+0.5', '-x+0.5,-y,-z+0.5', + 'x+0.5,y,-z+0.5', '-x+0.5,y,z+0.5', 'x+0.5,-y,z+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', + 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x+0.5,-y+0.5,-z', 'x+0.5,y+0.5,-z', + '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z'] + number: 69 + schoenflies: D2h^23 + universal_h_m: F m m m + Fddd: + spacegroup: Fddd + crystal_class: orthorhombic + hall: ' F 2 2 -1d' + hermann_mauguin: F d d d + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.25,-y+0.25,-z+0.25', + 'x+0.25,y+0.25,-z+0.25', '-x+0.25,y+0.25,z+0.25', 'x+0.25,-y+0.25,z+0.25', 'x,y+0.5,z+0.5', + '-x,-y+0.5,z+0.5', 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', '-x+0.25,-y+0.75,-z+0.75', + 'x+0.25,y+0.75,-z+0.75', '-x+0.25,y+0.75,z+0.75', 'x+0.25,-y+0.75,z+0.75', 'x+0.5,y,z+0.5', + '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', '-x+0.5,y,-z+0.5', '-x+0.75,-y+0.25,-z+0.75', + 'x+0.75,y+0.25,-z+0.75', '-x+0.75,y+0.25,z+0.75', 'x+0.75,-y+0.25,z+0.75', 'x+0.5,y+0.5,z', + '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', '-x+0.75,-y+0.75,-z+0.25', + 'x+0.75,y+0.75,-z+0.25', '-x+0.75,y+0.75,z+0.25', 'x+0.75,-y+0.75,z+0.25'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x+0.25,-y+0.25,-z+0.25', 'x+0.25,y+0.25,-z+0.25', + '-x+0.25,y+0.25,z+0.25', 'x+0.25,-y+0.25,z+0.25'] + number: 70 + schoenflies: D2h^24 + universal_h_m: F d d d :1 + Immm: + spacegroup: Immm + crystal_class: orthorhombic + hall: -I 2 2 + hermann_mauguin: I m m m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + '-x+0.5,y+0.5,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', + 'x+0.5,-y+0.5,z+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z'] + number: 71 + schoenflies: D2h^25 + universal_h_m: I m m m + Ibam: + spacegroup: Ibam + crystal_class: orthorhombic + hall: -I 2 2c + hermann_mauguin: I b a m + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z+1', + '-x+0.5,y+0.5,-z+1', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', '-x+0.5,y+0.5,z', + 'x+0.5,-y+0.5,z'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z+0.5', '-x,y,-z+0.5', '-x,-y,-z', 'x,y,-z', + '-x,y,z-0.5', 'x,-y,z-0.5'] + number: 72 + schoenflies: D2h^26 + universal_h_m: I b a m + Ibca: + spacegroup: Ibca + crystal_class: orthorhombic + hall: -I 2b 2c + hermann_mauguin: I b c a + symops: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y-0.5,-z', '-x,y,z-0.5', 'x,-y-0.5,z-0.5', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+1,z+0.5', + 'x+0.5,-y+0.5,-z+1', '-x+0.5,y+1,-z+1', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y,-z+0.5', + '-x+0.5,y+0.5,z', 'x+0.5,-y,z'] + ncsym: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', '-x,-y,-z', + 'x,y-0.5,-z', '-x,y,z-0.5', 'x,-y-0.5,z-0.5'] + number: 73 + schoenflies: D2h^27 + universal_h_m: I b c a + Imma: + spacegroup: Imma + crystal_class: orthorhombic + hall: -I 2b 2 + hermann_mauguin: I m m a + symops: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z', '-x,y+0.5,-z', '-x,-y,-z', 'x,y-0.5,-z', + '-x,y,z', 'x,-y-0.5,z', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+1,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + '-x+0.5,y+1,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y,-z+0.5', '-x+0.5,y+0.5,z+0.5', + 'x+0.5,-y,z+0.5'] + ncsym: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z', '-x,y+0.5,-z', '-x,-y,-z', 'x,y-0.5,-z', + '-x,y,z', 'x,-y-0.5,z'] + number: 74 + schoenflies: D2h^28 + universal_h_m: I m m a + P4: + spacegroup: P4 + crystal_class: tetragonal + hall: ' P 4' + hermann_mauguin: P 4 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z'] + number: 75 + schoenflies: C4^1 + universal_h_m: P 4 + P41: + spacegroup: P41 + crystal_class: tetragonal + hall: ' P 4w' + hermann_mauguin: P 41 + symops: ['x,y,z', '-y,x,z+0.25', '-x,-y,z+0.5', 'y,-x,z+0.75'] + ncsym: ['x,y,z', '-y,x,z+0.25', '-x,-y,z+0.5', 'y,-x,z+0.75'] + number: 76 + schoenflies: C4^2 + universal_h_m: P 41 + P42: + spacegroup: P42 + crystal_class: tetragonal + hall: ' P 4c' + hermann_mauguin: P 42 + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5'] + number: 77 + schoenflies: C4^3 + universal_h_m: P 42 + P43: + spacegroup: P43 + crystal_class: tetragonal + hall: ' P 4cw' + hermann_mauguin: P 43 + symops: ['x,y,z', '-y,x,z+0.75', '-x,-y,z+0.5', 'y,-x,z+0.25'] + ncsym: ['x,y,z', '-y,x,z+0.75', '-x,-y,z+0.5', 'y,-x,z+0.25'] + number: 78 + schoenflies: C4^4 + universal_h_m: P 43 + I4: + spacegroup: I4 + crystal_class: tetragonal + hall: ' I 4' + hermann_mauguin: I 4 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', + '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z'] + number: 79 + schoenflies: C4^5 + universal_h_m: I 4 + I41: + spacegroup: I41 + crystal_class: tetragonal + hall: ' I 4bw' + hermann_mauguin: I 41 + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75'] + number: 80 + schoenflies: C4^6 + universal_h_m: I 41 + P-4: + spacegroup: P-4 + crystal_class: tetragonal + hall: ' P -4' + hermann_mauguin: P -4 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z'] + number: 81 + schoenflies: S4^1 + universal_h_m: P -4 + I-4: + spacegroup: I-4 + crystal_class: tetragonal + hall: ' I -4' + hermann_mauguin: I -4 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', + '-x+0.5,-y+0.5,z+0.5', '-y+0.5,x+0.5,-z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z'] + number: 82 + schoenflies: S4^2 + universal_h_m: I -4 + P4/m: + spacegroup: P4/m + crystal_class: tetragonal + hall: -P 4 + hermann_mauguin: P 4/m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z'] + number: 83 + schoenflies: C4h^1 + universal_h_m: P 4/m + P42/m: + spacegroup: P42/m + crystal_class: tetragonal + hall: -P 4c + hermann_mauguin: P 42/m + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', + 'x,y,-z', '-y,x,-z-0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', + 'x,y,-z', '-y,x,-z-0.5'] + number: 84 + schoenflies: C4h^2 + universal_h_m: P 42/m + P4/n: + spacegroup: P4/n + crystal_class: tetragonal + hall: ' P 4ab -1ab' + hermann_mauguin: P 4/n + symops: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', '-x+0.5,-y+0.5,-z', + 'y,-x,-z', 'x+0.5,y+0.5,-z', '-y,x,-z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', '-x+0.5,-y+0.5,-z', + 'y,-x,-z', 'x+0.5,y+0.5,-z', '-y,x,-z'] + number: 85 + schoenflies: C4h^3 + universal_h_m: P 4/n :1 + P42/n: + spacegroup: P42/n + crystal_class: tetragonal + hall: ' P 4n -1n' + hermann_mauguin: P 42/n + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z'] + number: 86 + schoenflies: C4h^4 + universal_h_m: P 42/n :1 + I4/m: + spacegroup: I4/m + crystal_class: tetragonal + hall: -I 4 + hermann_mauguin: I 4/m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z'] + number: 87 + schoenflies: C4h^5 + universal_h_m: I 4/m + I41/a: + spacegroup: I41/a + crystal_class: tetragonal + hall: ' I 4bw -1bw' + hermann_mauguin: I 41/a + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,-y+0.5,-z+0.25', 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5', 'x+0.5,y+0.5,z+0.5', + '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25', '-x+0.5,-y+1,-z+0.75', + 'y+0.5,-x+0.5,-z+0.5', 'x,y+0.5,-z+0.25', '-y,x+1,-z'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,-y+0.5,-z+0.25', 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5'] + number: 88 + schoenflies: C4h^6 + universal_h_m: I 41/a :1 + P422: + spacegroup: P422 + crystal_class: tetragonal + hall: ' P 4 2' + hermann_mauguin: P 4 2 2 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z'] + number: 89 + schoenflies: D4^1 + universal_h_m: P 4 2 2 + P4212: + spacegroup: P4212 + crystal_class: tetragonal + hall: ' P 4ab 2ab' + hermann_mauguin: P 4 21 2 + symops: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', + 'y,x,-z', '-x+0.5,y+0.5,-z', '-y,-x,-z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', + 'y,x,-z', '-x+0.5,y+0.5,-z', '-y,-x,-z'] + number: 90 + schoenflies: D4^2 + universal_h_m: P 4 21 2 + P4122: + spacegroup: P4122 + crystal_class: tetragonal + hall: ' P 4w 2c' + hermann_mauguin: P 41 2 2 + symops: ['x,y,z', '-y,x,z+0.25', '-x,-y,z+0.5', 'y,-x,z+0.75', 'x,-y,-z+0.5', + 'y,x,-z+0.75', '-x,y,-z', '-y,-x,-z+0.25'] + ncsym: ['x,y,z', '-y,x,z+0.25', '-x,-y,z+0.5', 'y,-x,z+0.75', 'x,-y,-z+0.5', 'y,x,-z+0.75', + '-x,y,-z', '-y,-x,-z+0.25'] + number: 91 + schoenflies: D4^3 + universal_h_m: P 41 2 2 + P41212: + spacegroup: P41212 + crystal_class: tetragonal + hall: ' P 4abw 2nw' + hermann_mauguin: P 41 21 2 + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.25', '-x,-y,z+0.5', 'y+0.5,-x+0.5,z+0.75', + 'x+0.5,-y+0.5,-z+0.75', 'y,x,-z', '-x+0.5,y+0.5,-z+0.25', '-y,-x,-z+0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.25', '-x,-y,z+0.5', 'y+0.5,-x+0.5,z+0.75', + 'x+0.5,-y+0.5,-z+0.75', 'y,x,-z', '-x+0.5,y+0.5,-z+0.25', '-y,-x,-z+0.5'] + number: 92 + schoenflies: D4^4 + universal_h_m: P 41 21 2 + P4222: + spacegroup: P4222 + crystal_class: tetragonal + hall: ' P 4c 2' + hermann_mauguin: P 42 2 2 + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z', 'y,x,-z+0.5', + '-x,y,-z', '-y,-x,-z+0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z', 'y,x,-z+0.5', + '-x,y,-z', '-y,-x,-z+0.5'] + number: 93 + schoenflies: D4^5 + universal_h_m: P 42 2 2 + P42212: + spacegroup: P42212 + crystal_class: tetragonal + hall: ' P 4n 2n' + hermann_mauguin: P 42 21 2 + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z'] + number: 94 + schoenflies: D4^6 + universal_h_m: P 42 21 2 + P4322: + spacegroup: P4322 + crystal_class: tetragonal + hall: ' P 4cw 2c' + hermann_mauguin: P 43 2 2 + symops: ['x,y,z', '-y,x,z+0.75', '-x,-y,z+0.5', 'y,-x,z+0.25', 'x,-y,-z+0.5', + 'y,x,-z+0.25', '-x,y,-z', '-y,-x,-z+0.75'] + ncsym: ['x,y,z', '-y,x,z+0.75', '-x,-y,z+0.5', 'y,-x,z+0.25', 'x,-y,-z+0.5', 'y,x,-z+0.25', + '-x,y,-z', '-y,-x,-z+0.75'] + number: 95 + schoenflies: D4^7 + universal_h_m: P 43 2 2 + P43212: + spacegroup: P43212 + crystal_class: tetragonal + hall: ' P 4nw 2abw' + hermann_mauguin: P 43 21 2 + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.75', '-x,-y,z+0.5', 'y+0.5,-x+0.5,z+0.25', + 'x+0.5,-y+0.5,-z+0.25', 'y,x,-z', '-x+0.5,y+0.5,-z+0.75', '-y,-x,-z+0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.75', '-x,-y,z+0.5', 'y+0.5,-x+0.5,z+0.25', + 'x+0.5,-y+0.5,-z+0.25', 'y,x,-z', '-x+0.5,y+0.5,-z+0.75', '-y,-x,-z+0.5'] + number: 96 + schoenflies: D4^8 + universal_h_m: P 43 21 2 + I422: + spacegroup: I422 + crystal_class: tetragonal + hall: ' I 4 2' + hermann_mauguin: I 4 2 2 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', + '-y+0.5,-x+0.5,-z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z'] + number: 97 + schoenflies: D4^9 + universal_h_m: I 4 2 2 + I4122: + spacegroup: I4122 + crystal_class: tetragonal + hall: ' I 4bw 2bw' + hermann_mauguin: I 41 2 2 + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x,-y+0.5,-z+0.25', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y,-z+0.75', '-y,-x,-z', 'x+0.5,y+0.5,z+0.5', + '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25', 'x+0.5,-y+1,-z+0.75', + 'y+1,x+1,-z+1', '-x+1,y+0.5,-z+1.25', '-y+0.5,-x+0.5,-z+0.5'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x,-y+0.5,-z+0.25', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y,-z+0.75', '-y,-x,-z'] + number: 98 + schoenflies: D4^10 + universal_h_m: I 41 2 2 + P4mm: + spacegroup: P4mm + crystal_class: tetragonal + hall: ' P 4 -2' + hermann_mauguin: P 4 m m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z', '-y,-x,z', 'x,-y,z', + 'y,x,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z', '-y,-x,z', 'x,-y,z', + 'y,x,z'] + number: 99 + schoenflies: C4v^1 + universal_h_m: P 4 m m + P4bm: + spacegroup: P4bm + crystal_class: tetragonal + hall: ' P 4 -2ab' + hermann_mauguin: P 4 b m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', + 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', + 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z'] + number: 100 + schoenflies: C4v^2 + universal_h_m: P 4 b m + P42cm: + spacegroup: P42cm + crystal_class: tetragonal + hall: ' P 4c -2c' + hermann_mauguin: P 42 c m + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,y,z+0.5', '-y,-x,z', + 'x,-y,z+0.5', 'y,x,z'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,y,z+0.5', '-y,-x,z', + 'x,-y,z+0.5', 'y,x,z'] + number: 101 + schoenflies: C4v^3 + universal_h_m: P 42 c m + P42nm: + spacegroup: P42nm + crystal_class: tetragonal + hall: ' P 4n -2n' + hermann_mauguin: P 42 n m + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', '-x+0.5,y+0.5,z+0.5', + '-y,-x,z', 'x+0.5,-y+0.5,z+0.5', 'y,x,z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', '-x+0.5,y+0.5,z+0.5', + '-y,-x,z', 'x+0.5,-y+0.5,z+0.5', 'y,x,z'] + number: 102 + schoenflies: C4v^4 + universal_h_m: P 42 n m + P4cc: + spacegroup: P4cc + crystal_class: tetragonal + hall: ' P 4 -2c' + hermann_mauguin: P 4 c c + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z+0.5', '-y,-x,z+0.5', + 'x,-y,z+0.5', 'y,x,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z+0.5', '-y,-x,z+0.5', 'x,-y,z+0.5', + 'y,x,z+0.5'] + number: 103 + schoenflies: C4v^5 + universal_h_m: P 4 c c + P4nc: + spacegroup: P4nc + crystal_class: tetragonal + hall: ' P 4 -2n' + hermann_mauguin: P 4 n c + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', + 'x+0.5,-y+0.5,z+0.5', 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', + 'x+0.5,-y+0.5,z+0.5', 'y+0.5,x+0.5,z+0.5'] + number: 104 + schoenflies: C4v^6 + universal_h_m: P 4 n c + P42mc: + spacegroup: P42mc + crystal_class: tetragonal + hall: ' P 4c -2' + hermann_mauguin: P 42 m c + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,y,z', '-y,-x,z+0.5', + 'x,-y,z', 'y,x,z+0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x,y,z', '-y,-x,z+0.5', + 'x,-y,z', 'y,x,z+0.5'] + number: 105 + schoenflies: C4v^7 + universal_h_m: P 42 m c + P42bc: + spacegroup: P42bc + crystal_class: tetragonal + hall: ' P 4c -2ab' + hermann_mauguin: P 42 b c + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z+0.5', + 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z+0.5', + 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z+0.5'] + number: 106 + schoenflies: C4v^8 + universal_h_m: P 42 b c + I4mm: + spacegroup: I4mm + crystal_class: tetragonal + hall: ' I 4 -2' + hermann_mauguin: I 4 m m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z', '-y,-x,z', 'x,-y,z', + 'y,x,z', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x+0.5,z+0.5', + '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z', '-y,-x,z', 'x,-y,z', + 'y,x,z'] + number: 107 + schoenflies: C4v^9 + universal_h_m: I 4 m m + I4cm: + spacegroup: I4cm + crystal_class: tetragonal + hall: ' I 4 -2c' + hermann_mauguin: I 4 c m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z+0.5', '-y,-x,z+0.5', + 'x,-y,z+0.5', 'y,x,z+0.5', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', '-x+0.5,y+0.5,z+1', '-y+0.5,-x+0.5,z+1', 'x+0.5,-y+0.5,z+1', + 'y+0.5,x+0.5,z+1'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', '-x,y,z+0.5', '-y,-x,z+0.5', 'x,-y,z+0.5', + 'y,x,z+0.5'] + number: 108 + schoenflies: C4v^10 + universal_h_m: I 4 c m + I41md: + spacegroup: I41md + crystal_class: tetragonal + hall: ' I 4bw -2' + hermann_mauguin: I 41 m d + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,y,z', '-y,-x+0.5,z+0.25', 'x+0.5,-y+0.5,z+0.5', 'y+0.5,x,z+0.75', 'x+0.5,y+0.5,z+0.5', + '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25', '-x+0.5,y+0.5,z+0.5', + '-y+0.5,-x+1,z+0.75', 'x+1,-y+1,z+1', 'y+1,x+0.5,z+1.25'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,y,z', '-y,-x+0.5,z+0.25', 'x+0.5,-y+0.5,z+0.5', 'y+0.5,x,z+0.75'] + number: 109 + schoenflies: C4v^11 + universal_h_m: I 41 m d + I41cd: + spacegroup: I41cd + crystal_class: tetragonal + hall: ' I 4bw -2c' + hermann_mauguin: I 41 c d + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,y,z+0.5', '-y,-x+0.5,z+0.75', 'x+0.5,-y+0.5,z', 'y+0.5,x,z+0.25', 'x+0.5,y+0.5,z+0.5', + '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25', '-x+0.5,y+0.5,z+1', + '-y+0.5,-x+1,z+1.25', 'x+1,-y+1,z+0.5', 'y+1,x+0.5,z+0.75'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + '-x,y,z+0.5', '-y,-x+0.5,z+0.75', 'x+0.5,-y+0.5,z', 'y+0.5,x,z+0.25'] + number: 110 + schoenflies: C4v^12 + universal_h_m: I 41 c d + P-42m: + spacegroup: P-42m + crystal_class: tetragonal + hall: ' P -4 2' + hermann_mauguin: P -4 2 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z'] + number: 111 + schoenflies: D2d^1 + universal_h_m: P -4 2 m + P-42c: + spacegroup: P-42c + crystal_class: tetragonal + hall: ' P -4 2c' + hermann_mauguin: P -4 2 c + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z+0.5', '-y,-x,z+0.5', + '-x,y,-z+0.5', 'y,x,z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z+0.5', '-y,-x,z+0.5', + '-x,y,-z+0.5', 'y,x,z+0.5'] + number: 112 + schoenflies: D2d^2 + universal_h_m: P -4 2 c + P-421m: + spacegroup: P-421m + crystal_class: tetragonal + hall: ' P -4 2ab' + hermann_mauguin: P -4 21 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x+0.5,-y+0.5,-z', '-y+0.5,-x+0.5,z', + '-x+0.5,y+0.5,-z', 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x+0.5,-y+0.5,-z', '-y+0.5,-x+0.5,z', + '-x+0.5,y+0.5,-z', 'y+0.5,x+0.5,z'] + number: 113 + schoenflies: D2d^3 + universal_h_m: P -4 21 m + P-421c: + spacegroup: P-421c + crystal_class: tetragonal + hall: ' P -4 2n' + hermann_mauguin: P -4 21 c + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x+0.5,-y+0.5,-z+0.5', '-y+0.5,-x+0.5,z+0.5', + '-x+0.5,y+0.5,-z+0.5', 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x+0.5,-y+0.5,-z+0.5', '-y+0.5,-x+0.5,z+0.5', + '-x+0.5,y+0.5,-z+0.5', 'y+0.5,x+0.5,z+0.5'] + number: 114 + schoenflies: D2d^4 + universal_h_m: P -4 21 c + P-4m2: + spacegroup: P-4m2 + crystal_class: tetragonal + hall: ' P -4 -2' + hermann_mauguin: P -4 m 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z', 'y,x,-z', 'x,-y,z', + '-y,-x,-z'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z', 'y,x,-z', 'x,-y,z', + '-y,-x,-z'] + number: 115 + schoenflies: D2d^5 + universal_h_m: P -4 m 2 + P-4c2: + spacegroup: P-4c2 + crystal_class: tetragonal + hall: ' P -4 -2c' + hermann_mauguin: P -4 c 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z+0.5', 'y,x,-z+0.5', + 'x,-y,z+0.5', '-y,-x,-z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z+0.5', 'y,x,-z+0.5', + 'x,-y,z+0.5', '-y,-x,-z+0.5'] + number: 116 + schoenflies: D2d^6 + universal_h_m: P -4 c 2 + P-4b2: + spacegroup: P-4b2 + crystal_class: tetragonal + hall: ' P -4 -2ab' + hermann_mauguin: P -4 b 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x+0.5,y+0.5,z', 'y+0.5,x+0.5,-z', + 'x+0.5,-y+0.5,z', '-y+0.5,-x+0.5,-z'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x+0.5,y+0.5,z', 'y+0.5,x+0.5,-z', + 'x+0.5,-y+0.5,z', '-y+0.5,-x+0.5,-z'] + number: 117 + schoenflies: D2d^7 + universal_h_m: P -4 b 2 + P-4n2: + spacegroup: P-4n2 + crystal_class: tetragonal + hall: ' P -4 -2n' + hermann_mauguin: P -4 n 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', 'y+0.5,x+0.5,-z+0.5', + 'x+0.5,-y+0.5,z+0.5', '-y+0.5,-x+0.5,-z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', 'y+0.5,x+0.5,-z+0.5', + 'x+0.5,-y+0.5,z+0.5', '-y+0.5,-x+0.5,-z+0.5'] + number: 118 + schoenflies: D2d^8 + universal_h_m: P -4 n 2 + I-4m2: + spacegroup: I-4m2 + crystal_class: tetragonal + hall: ' I -4 -2' + hermann_mauguin: I -4 m 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z', 'y,x,-z', 'x,-y,z', + '-y,-x,-z', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', 'y+0.5,x+0.5,-z+0.5', 'x+0.5,-y+0.5,z+0.5', + '-y+0.5,-x+0.5,-z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z', 'y,x,-z', 'x,-y,z', + '-y,-x,-z'] + number: 119 + schoenflies: D2d^9 + universal_h_m: I -4 m 2 + I-4c2: + spacegroup: I-4c2 + crystal_class: tetragonal + hall: ' I -4 -2c' + hermann_mauguin: I -4 c 2 + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z+0.5', 'y,x,-z+0.5', + 'x,-y,z+0.5', '-y,-x,-z+0.5', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+1', 'y+0.5,x+0.5,-z+1', 'x+0.5,-y+0.5,z+1', + '-y+0.5,-x+0.5,-z+1'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', '-x,y,z+0.5', 'y,x,-z+0.5', + 'x,-y,z+0.5', '-y,-x,-z+0.5'] + number: 120 + schoenflies: D2d^10 + universal_h_m: I -4 c 2 + I-42m: + spacegroup: I-42m + crystal_class: tetragonal + hall: ' I -4 2' + hermann_mauguin: I -4 2 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,z+0.5', + '-y+0.5,x+0.5,-z+0.5', 'x+0.5,-y+0.5,-z+0.5', '-y+0.5,-x+0.5,z+0.5', '-x+0.5,y+0.5,-z+0.5', + 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z'] + number: 121 + schoenflies: D2d^11 + universal_h_m: I -4 2 m + I-42d: + spacegroup: I-42d + crystal_class: tetragonal + hall: ' I -4 2bw' + hermann_mauguin: I -4 2 d + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y+0.5,-z+0.25', '-y+0.5,-x,z+0.75', + '-x,y+0.5,-z+0.25', 'y+0.5,x,z+0.75', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', + '-x+0.5,-y+0.5,z+0.5', '-y+0.5,x+0.5,-z+0.5', 'x+0.5,-y+1,-z+0.75', '-y+1,-x+0.5,z+1.25', + '-x+0.5,y+1,-z+0.75', 'y+1,x+0.5,z+1.25'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y+0.5,-z+0.25', '-y+0.5,-x,z+0.75', + '-x,y+0.5,-z+0.25', 'y+0.5,x,z+0.75'] + number: 122 + schoenflies: D2d^12 + universal_h_m: I -4 2 d + P4/mmm: + spacegroup: P4/mmm + crystal_class: tetragonal + hall: -P 4 2 + hermann_mauguin: P 4/m m m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z'] + number: 123 + schoenflies: D4h^1 + universal_h_m: P 4/m m m + P4/mcc: + spacegroup: P4/mcc + crystal_class: tetragonal + hall: -P 4 2c + hermann_mauguin: P 4/m c c + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z+0.5', 'y,x,-z+0.5', + '-x,y,-z+0.5', '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z-0.5', + '-y,-x,z-0.5', 'x,-y,z-0.5', 'y,x,z-0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z+0.5', 'y,x,-z+0.5', '-x,y,-z+0.5', + '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z-0.5', '-y,-x,z-0.5', + 'x,-y,z-0.5', 'y,x,z-0.5'] + number: 124 + schoenflies: D4h^2 + universal_h_m: P 4/m c c + P4/nbm: + spacegroup: P4/nbm + crystal_class: tetragonal + hall: ' P 4 2 -1ab' + hermann_mauguin: P 4/n b m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x+0.5,-y+0.5,-z', 'y+0.5,-x+0.5,-z', 'x+0.5,y+0.5,-z', '-y+0.5,x+0.5,-z', + '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x+0.5,-y+0.5,-z', 'y+0.5,-x+0.5,-z', 'x+0.5,y+0.5,-z', '-y+0.5,x+0.5,-z', + '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z'] + number: 125 + schoenflies: D4h^3 + universal_h_m: P 4/n b m :1 + P4/nnc: + spacegroup: P4/nnc + crystal_class: tetragonal + hall: ' P 4 2 -1n' + hermann_mauguin: P 4/n n c + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5'] + number: 126 + schoenflies: D4h^4 + universal_h_m: P 4/n n c :1 + P4/mbm: + spacegroup: P4/mbm + crystal_class: tetragonal + hall: -P 4 2ab + hermann_mauguin: P 4/m b m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z', + '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', + '-x-0.5,y-0.5,z', '-y-0.5,-x-0.5,z', 'x-0.5,-y-0.5,z', 'y-0.5,x-0.5,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z', + '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', + '-x-0.5,y-0.5,z', '-y-0.5,-x-0.5,z', 'x-0.5,-y-0.5,z', 'y-0.5,x-0.5,z'] + number: 127 + schoenflies: D4h^5 + universal_h_m: P 4/m b m + P4/mnc: + spacegroup: P4/mnc + crystal_class: tetragonal + hall: -P 4 2n + hermann_mauguin: P 4/m n c + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', + '-x+0.5,y+0.5,-z+0.5', '-y+0.5,-x+0.5,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z', '-x-0.5,y-0.5,z-0.5', '-y-0.5,-x-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5', + 'y-0.5,x-0.5,z-0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', + '-x+0.5,y+0.5,-z+0.5', '-y+0.5,-x+0.5,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', + '-y,x,-z', '-x-0.5,y-0.5,z-0.5', '-y-0.5,-x-0.5,z-0.5', 'x-0.5,-y-0.5,z-0.5', + 'y-0.5,x-0.5,z-0.5'] + number: 128 + schoenflies: D4h^6 + universal_h_m: P 4/m n c + P4/nmm: + spacegroup: P4/nmm + crystal_class: tetragonal + hall: ' P 4ab 2ab -1ab' + hermann_mauguin: P 4/n m m + symops: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', + 'y,x,-z', '-x+0.5,y+0.5,-z', '-y,-x,-z', '-x+0.5,-y+0.5,-z', 'y,-x,-z', 'x+0.5,y+0.5,-z', + '-y,x,-z', '-x,y,z', '-y+0.5,-x+0.5,z', 'x,-y,z', 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', + 'y,x,-z', '-x+0.5,y+0.5,-z', '-y,-x,-z', '-x+0.5,-y+0.5,-z', 'y,-x,-z', 'x+0.5,y+0.5,-z', + '-y,x,-z', '-x,y,z', '-y+0.5,-x+0.5,z', 'x,-y,z', 'y+0.5,x+0.5,z'] + number: 129 + schoenflies: D4h^7 + universal_h_m: P 4/n m m :1 + P4/ncc: + spacegroup: P4/ncc + crystal_class: tetragonal + hall: ' P 4ab 2n -1ab' + hermann_mauguin: P 4/n c c + symops: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z+0.5', '-x+0.5,-y+0.5,-z', 'y,-x,-z', + 'x+0.5,y+0.5,-z', '-y,x,-z', '-x,y,z-0.5', '-y+0.5,-x+0.5,z-0.5', 'x,-y,z-0.5', + 'y+0.5,x+0.5,z-0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z', '-x,-y,z', 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z+0.5', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z+0.5', '-x+0.5,-y+0.5,-z', 'y,-x,-z', + 'x+0.5,y+0.5,-z', '-y,x,-z', '-x,y,z-0.5', '-y+0.5,-x+0.5,z-0.5', 'x,-y,z-0.5', + 'y+0.5,x+0.5,z-0.5'] + number: 130 + schoenflies: D4h^8 + universal_h_m: P 4/n c c :1 + P42/mmc: + spacegroup: P42/mmc + crystal_class: tetragonal + hall: -P 4c 2 + hermann_mauguin: P 42/m m c + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z', 'y,x,-z+0.5', + '-x,y,-z', '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', '-y,x,-z-0.5', + '-x,y,z', '-y,-x,z-0.5', 'x,-y,z', 'y,x,z-0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z', 'y,x,-z+0.5', + '-x,y,-z', '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', '-y,x,-z-0.5', + '-x,y,z', '-y,-x,z-0.5', 'x,-y,z', 'y,x,z-0.5'] + number: 131 + schoenflies: D4h^9 + universal_h_m: P 42/m m c + P42/mcm: + spacegroup: P42/mcm + crystal_class: tetragonal + hall: -P 4c 2c + hermann_mauguin: P 42/m c m + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z+0.5', 'y,x,-z', + '-x,y,-z+0.5', '-y,-x,-z', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', '-y,x,-z-0.5', + '-x,y,z-0.5', '-y,-x,z', 'x,-y,z-0.5', 'y,x,z'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x,-y,-z+0.5', 'y,x,-z', + '-x,y,-z+0.5', '-y,-x,-z', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', '-y,x,-z-0.5', + '-x,y,z-0.5', '-y,-x,z', 'x,-y,z-0.5', 'y,x,z'] + number: 132 + schoenflies: D4h^10 + universal_h_m: P 42/m c m + P42/nbc: + spacegroup: P42/nbc + crystal_class: tetragonal + hall: ' P 4n 2c -1n' + hermann_mauguin: P 42/n b c + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z+0.5', + 'y+0.5,x+0.5,-z', '-x,y,-z+0.5', '-y+0.5,-x+0.5,-z', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z', '-y,-x,z+0.5', + 'x+0.5,-y+0.5,z', 'y,x,z+0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z+0.5', + 'y+0.5,x+0.5,-z', '-x,y,-z+0.5', '-y+0.5,-x+0.5,-z', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z', '-y,-x,z+0.5', + 'x+0.5,-y+0.5,z', 'y,x,z+0.5'] + number: 133 + schoenflies: D4h^11 + universal_h_m: P 42/n b c :1 + P42/nnm: + spacegroup: P42/nnm + crystal_class: tetragonal + hall: ' P 4n 2 -1n' + hermann_mauguin: P 42/n n m + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', '-y,-x,z', + 'x+0.5,-y+0.5,z+0.5', 'y,x,z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', + 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', '-y,-x,z', + 'x+0.5,-y+0.5,z+0.5', 'y,x,z'] + number: 134 + schoenflies: D4h^12 + universal_h_m: P 42/n n m :1 + P42/mbc: + spacegroup: P42/mbc + crystal_class: tetragonal + hall: -P 4c 2ab + hermann_mauguin: P 42/m b c + symops: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z+0.5', + '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', + '-y,x,-z-0.5', '-x-0.5,y-0.5,z', '-y-0.5,-x-0.5,z-0.5', 'x-0.5,-y-0.5,z', 'y-0.5,x-0.5,z-0.5'] + ncsym: ['x,y,z', '-y,x,z+0.5', '-x,-y,z', 'y,-x,z+0.5', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z+0.5', + '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z+0.5', '-x,-y,-z', 'y,-x,-z-0.5', 'x,y,-z', + '-y,x,-z-0.5', '-x-0.5,y-0.5,z', '-y-0.5,-x-0.5,z-0.5', 'x-0.5,-y-0.5,z', 'y-0.5,x-0.5,z-0.5'] + number: 135 + schoenflies: D4h^13 + universal_h_m: P 42/m b c + P42/mnm: + spacegroup: P42/mnm + crystal_class: tetragonal + hall: -P 4n 2n + hermann_mauguin: P 42/m n m + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z', '-x,-y,-z', 'y-0.5,-x-0.5,-z-0.5', + 'x,y,-z', '-y-0.5,x-0.5,-z-0.5', '-x-0.5,y-0.5,z-0.5', '-y,-x,z', 'x-0.5,-y-0.5,z-0.5', + 'y,x,z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z', '-x,-y,-z', 'y-0.5,-x-0.5,-z-0.5', + 'x,y,-z', '-y-0.5,x-0.5,-z-0.5', '-x-0.5,y-0.5,z-0.5', '-y,-x,z', 'x-0.5,-y-0.5,z-0.5', + 'y,x,z'] + number: 136 + schoenflies: D4h^14 + universal_h_m: P 42/m n m + P42/nmc: + spacegroup: P42/nmc + crystal_class: tetragonal + hall: ' P 4n 2n -1n' + hermann_mauguin: P 42/n m c + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z', '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', + 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x,y,z', '-y+0.5,-x+0.5,z+0.5', 'x,-y,z', + 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + 'y,x,-z', '-x+0.5,y+0.5,-z+0.5', '-y,-x,-z', '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', + 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x,y,z', '-y+0.5,-x+0.5,z+0.5', 'x,-y,z', + 'y+0.5,x+0.5,z+0.5'] + number: 137 + schoenflies: D4h^15 + universal_h_m: P 42/n m c :1 + P42/ncm: + spacegroup: P42/ncm + crystal_class: tetragonal + hall: ' P 4n 2ab -1n' + hermann_mauguin: P 42/n c m + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z', + 'y,x,-z+0.5', '-x+0.5,y+0.5,-z', '-y,-x,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', + 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x,y,z+0.5', '-y+0.5,-x+0.5,z', 'x,-y,z+0.5', + 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z', + 'y,x,-z+0.5', '-x+0.5,y+0.5,-z', '-y,-x,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', + 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x,y,z+0.5', '-y+0.5,-x+0.5,z', 'x,-y,z+0.5', + 'y+0.5,x+0.5,z'] + number: 138 + schoenflies: D4h^16 + universal_h_m: P 42/n c m :1 + I4/mmm: + spacegroup: I4/mmm + crystal_class: tetragonal + hall: -I 4 2 + hermann_mauguin: I 4/m m m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', + '-y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z'] + number: 139 + schoenflies: D4h^17 + universal_h_m: I 4/m m m + I4/mcm: + spacegroup: I4/mcm + crystal_class: tetragonal + hall: -I 4 2c + hermann_mauguin: I 4/m c m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z+0.5', 'y,x,-z+0.5', + '-x,y,-z+0.5', '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z-0.5', + '-y,-x,z-0.5', 'x,-y,z-0.5', 'y,x,z-0.5', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', + '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+1', 'y+0.5,x+0.5,-z+1', + '-x+0.5,y+0.5,-z+1', '-y+0.5,-x+0.5,-z+1', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', + 'x+0.5,y+0.5,-z+0.5', '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', + 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z+0.5', 'y,x,-z+0.5', '-x,y,-z+0.5', + '-y,-x,-z+0.5', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z-0.5', '-y,-x,z-0.5', + 'x,-y,z-0.5', 'y,x,z-0.5'] + number: 140 + schoenflies: D4h^18 + universal_h_m: I 4/m c m + I41/amd: + spacegroup: I41/amd + crystal_class: tetragonal + hall: ' I 4bw 2bw -1bw' + hermann_mauguin: I 41/a m d + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x,-y+0.5,-z+0.25', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y,-z+0.75', '-y,-x,-z', '-x,-y+0.5,-z+0.25', + 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5', '-x,y,z', '-y-0.5,-x,z-0.25', + 'x-0.5,-y+0.5,z-0.5', 'y,x+0.5,z+0.25', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+1,z+0.75', + '-x+1,-y+1,z+1', 'y+1,-x+0.5,z+1.25', 'x+0.5,-y+1,-z+0.75', 'y+1,x+1,-z+1', + '-x+1,y+0.5,-z+1.25', '-y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+1,-z+0.75', 'y+0.5,-x+0.5,-z+0.5', + 'x,y+0.5,-z+0.25', '-y,x+1,-z', '-x+0.5,y+0.5,z+0.5', '-y,-x+0.5,z+0.25', 'x,-y+1,z', + 'y+0.5,x+1,z+0.75'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x,-y+0.5,-z+0.25', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y,-z+0.75', '-y,-x,-z', '-x,-y+0.5,-z+0.25', + 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5', '-x,y,z', '-y-0.5,-x,z-0.25', + 'x-0.5,-y+0.5,z-0.5', 'y,x+0.5,z+0.25'] + number: 141 + schoenflies: D4h^19 + universal_h_m: I 41/a m d :1 + I41/acd: + spacegroup: I41/acd + crystal_class: tetragonal + hall: ' I 4bw 2aw -1bw' + hermann_mauguin: I 41/a c d + symops: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x+0.5,-y,-z+0.25', 'y,x,-z+0.5', '-x,y+0.5,-z+0.75', '-y+0.5,-x+0.5,-z', '-x,-y+0.5,-z+0.25', + 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5', '-x-0.5,y+0.5,z', '-y,-x+0.5,z-0.25', + 'x,-y,z-0.5', 'y-0.5,x,z+0.25', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+1,z+0.75', '-x+1,-y+1,z+1', + 'y+1,-x+0.5,z+1.25', 'x+1,-y+0.5,-z+0.75', 'y+0.5,x+0.5,-z+1', '-x+0.5,y+1,-z+1.25', + '-y+1,-x+1,-z+0.5', '-x+0.5,-y+1,-z+0.75', 'y+0.5,-x+0.5,-z+0.5', 'x,y+0.5,-z+0.25', + '-y,x+1,-z', '-x,y+1,z+0.5', '-y+0.5,-x+1,z+0.25', 'x+0.5,-y+0.5,z', 'y,x+0.5,z+0.75'] + ncsym: ['x,y,z', '-y,x+0.5,z+0.25', '-x+0.5,-y+0.5,z+0.5', 'y+0.5,-x,z+0.75', + 'x+0.5,-y,-z+0.25', 'y,x,-z+0.5', '-x,y+0.5,-z+0.75', '-y+0.5,-x+0.5,-z', '-x,-y+0.5,-z+0.25', + 'y,-x,-z', 'x-0.5,y,-z-0.25', '-y-0.5,x+0.5,-z-0.5', '-x-0.5,y+0.5,z', '-y,-x+0.5,z-0.25', + 'x,-y,z-0.5', 'y-0.5,x,z+0.25'] + number: 142 + schoenflies: D4h^20 + universal_h_m: I 41/a c d :1 + P3: + spacegroup: P3 + crystal_class: trigonal + hall: ' P 3' + hermann_mauguin: P 3 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z'] + number: 143 + schoenflies: C3^1 + universal_h_m: P 3 + P31: + spacegroup: P31 + crystal_class: trigonal + hall: ' P 31' + hermann_mauguin: P 31 + symops: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667'] + number: 144 + schoenflies: C3^2 + universal_h_m: P 31 + P32: + spacegroup: P32 + crystal_class: trigonal + hall: ' P 32' + hermann_mauguin: P 32 + symops: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333'] + ncsym: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333'] + number: 145 + schoenflies: C3^3 + universal_h_m: P 32 + R3: + spacegroup: R3 + crystal_class: rhombohedral + hall: ' R 3' + hermann_mauguin: R 3 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'x+0.667,y+0.333,z+0.333', '-y+0.667,x-y+0.333,z+0.333', + '-x+y+0.667,-x+0.333,z+0.333', 'x+0.333,y+0.667,z+0.667', '-y+0.333,x-y+0.667,z+0.667', + '-x+y+0.333,-x+0.667,z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z'] + number: 146 + schoenflies: C3^4 + universal_h_m: R 3 :H + P-3: + spacegroup: P-3 + crystal_class: trigonal + hall: -P 3 + hermann_mauguin: P -3 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z'] + number: 147 + schoenflies: C3i^1 + universal_h_m: P -3 + R-3: + spacegroup: R-3 + crystal_class: rhombohedral + hall: -R 3 + hermann_mauguin: R -3 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', + 'x+0.667,y+0.333,z+0.333', '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', + '-x+0.667,-y+0.333,-z+0.333', 'y+0.667,-x+y+0.333,-z+0.333', 'x-y+0.667,x+0.333,-z+0.333', + 'x+0.333,y+0.667,z+0.667', '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', + '-x+0.333,-y+0.667,-z+0.667', 'y+0.333,-x+y+0.667,-z+0.667', 'x-y+0.333,x+0.667,-z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z'] + number: 148 + schoenflies: C3i^2 + universal_h_m: R -3 :H + P312: + spacegroup: P312 + crystal_class: trigonal + hall: ' P 3 2' + hermann_mauguin: P 3 1 2 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z', 'x,x-y,-z', '-x+y,y,-z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z', 'x,x-y,-z', '-x+y,y,-z'] + number: 149 + schoenflies: D3^1 + universal_h_m: P 3 1 2 + P321: + spacegroup: P321 + crystal_class: trigonal + hall: ' P 3 2"' + hermann_mauguin: P 3 2 1 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z'] + number: 150 + schoenflies: D3^2 + universal_h_m: P 3 2 1 + P3112: + spacegroup: P3112 + crystal_class: trigonal + hall: ' P 31 2 (0 0 4)' + hermann_mauguin: P 31 1 2 + symops: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667', '-y,-x,-z+0.667', 'x,x-y,-z', + '-x+y,y,-z+0.333'] + ncsym: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667', '-y,-x,-z+0.667', 'x,x-y,-z', + '-x+y,y,-z+0.333'] + number: 151 + schoenflies: D3^3 + universal_h_m: P 31 1 2 + P3121: + spacegroup: P3121 + crystal_class: trigonal + hall: ' P 31 2"' + hermann_mauguin: P 31 2 1 + symops: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667', 'y,x,-z', '-x,-x+y,-z+0.333', + 'x-y,-y,-z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z+0.333', '-x+y,-x,z+0.667', 'y,x,-z', '-x,-x+y,-z+0.333', + 'x-y,-y,-z+0.667'] + number: 152 + schoenflies: D3^4 + universal_h_m: P 31 2 1 + P3212: + spacegroup: P3212 + crystal_class: trigonal + hall: ' P 32 2 (0 0 2)' + hermann_mauguin: P 32 1 2 + symops: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333', '-y,-x,-z+0.333', 'x,x-y,-z', + '-x+y,y,-z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333', '-y,-x,-z+0.333', 'x,x-y,-z', + '-x+y,y,-z+0.667'] + number: 153 + schoenflies: D3^5 + universal_h_m: P 32 1 2 + P3221: + spacegroup: P3221 + crystal_class: trigonal + hall: ' P 32 2"' + hermann_mauguin: P 32 2 1 + symops: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333', 'y,x,-z', '-x,-x+y,-z+0.667', + 'x-y,-y,-z+0.333'] + ncsym: ['x,y,z', '-y,x-y,z+0.667', '-x+y,-x,z+0.333', 'y,x,-z', '-x,-x+y,-z+0.667', + 'x-y,-y,-z+0.333'] + number: 154 + schoenflies: D3^6 + universal_h_m: P 32 2 1 + R32: + spacegroup: R32 + crystal_class: rhombohedral + hall: ' R 3 2"' + hermann_mauguin: R 3 2 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z', + 'x+0.667,y+0.333,z+0.333', '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', + 'y+0.667,x+0.333,-z+0.333', '-x+0.667,-x+y+0.333,-z+0.333', 'x-y+0.667,-y+0.333,-z+0.333', + 'x+0.333,y+0.667,z+0.667', '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', + 'y+0.333,x+0.667,-z+0.667', '-x+0.333,-x+y+0.667,-z+0.667', 'x-y+0.333,-y+0.667,-z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z'] + number: 155 + schoenflies: D3^7 + universal_h_m: R 3 2 :H + P3m1: + spacegroup: P3m1 + crystal_class: trigonal + hall: ' P 3 -2"' + hermann_mauguin: P 3 m 1 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + number: 156 + schoenflies: C3v^1 + universal_h_m: P 3 m 1 + P31m: + spacegroup: P31m + crystal_class: trigonal + hall: ' P 3 -2' + hermann_mauguin: P 3 1 m + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,z', '-x,-x+y,z', 'x-y,-y,z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,z', '-x,-x+y,z', 'x-y,-y,z'] + number: 157 + schoenflies: C3v^2 + universal_h_m: P 3 1 m + P3c1: + spacegroup: P3c1 + crystal_class: trigonal + hall: ' P 3 -2"c' + hermann_mauguin: P 3 c 1 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z+0.5', 'x,x-y,z+0.5', '-x+y,y,z+0.5'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z+0.5', 'x,x-y,z+0.5', '-x+y,y,z+0.5'] + number: 158 + schoenflies: C3v^3 + universal_h_m: P 3 c 1 + P31c: + spacegroup: P31c + crystal_class: trigonal + hall: ' P 3 -2c' + hermann_mauguin: P 3 1 c + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,z+0.5', '-x,-x+y,z+0.5', 'x-y,-y,z+0.5'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,z+0.5', '-x,-x+y,z+0.5', 'x-y,-y,z+0.5'] + number: 159 + schoenflies: C3v^4 + universal_h_m: P 3 1 c + R3m: + spacegroup: R3m + crystal_class: rhombohedral + hall: ' R 3 -2"' + hermann_mauguin: R 3 m + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z', 'x+0.667,y+0.333,z+0.333', + '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', '-y+0.667,-x+0.333,z+0.333', + 'x+0.667,x-y+0.333,z+0.333', '-x+y+0.667,y+0.333,z+0.333', 'x+0.333,y+0.667,z+0.667', + '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', '-y+0.333,-x+0.667,z+0.667', + 'x+0.333,x-y+0.667,z+0.667', '-x+y+0.333,y+0.667,z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + number: 160 + schoenflies: C3v^5 + universal_h_m: R 3 m :H + R3c: + spacegroup: R3c + crystal_class: rhombohedral + hall: ' R 3 -2"c' + hermann_mauguin: R 3 c + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z+0.5', 'x,x-y,z+0.5', '-x+y,y,z+0.5', + 'x+0.667,y+0.333,z+0.333', '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', + '-y+0.667,-x+0.333,z+0.833', 'x+0.667,x-y+0.333,z+0.833', '-x+y+0.667,y+0.333,z+0.833', + 'x+0.333,y+0.667,z+0.667', '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', + '-y+0.333,-x+0.667,z+1.17', 'x+0.333,x-y+0.667,z+1.17', '-x+y+0.333,y+0.667,z+1.17'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,z+0.5', 'x,x-y,z+0.5', '-x+y,y,z+0.5'] + number: 161 + schoenflies: C3v^6 + universal_h_m: R 3 c :H + P-31m: + spacegroup: P-31m + crystal_class: trigonal + hall: -P 3 2 + hermann_mauguin: P -3 1 m + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z', 'x,x-y,-z', '-x+y,y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', 'y,x,z', '-x,-x+y,z', 'x-y,-y,z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z', 'x,x-y,-z', '-x+y,y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', 'y,x,z', '-x,-x+y,z', 'x-y,-y,z'] + number: 162 + schoenflies: D3d^1 + universal_h_m: P -3 1 m + P-31c: + spacegroup: P-31c + crystal_class: trigonal + hall: -P 3 2c + hermann_mauguin: P -3 1 c + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z+0.5', 'x,x-y,-z+0.5', '-x+y,y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', 'y,x,z-0.5', '-x,-x+y,z-0.5', 'x-y,-y,z-0.5'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', '-y,-x,-z+0.5', 'x,x-y,-z+0.5', '-x+y,y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', 'y,x,z-0.5', '-x,-x+y,z-0.5', 'x-y,-y,z-0.5'] + number: 163 + schoenflies: D3d^2 + universal_h_m: P -3 1 c + P-3m1: + spacegroup: P-3m1 + crystal_class: trigonal + hall: -P 3 2" + hermann_mauguin: P -3 m 1 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + number: 164 + schoenflies: D3d^3 + universal_h_m: P -3 m 1 + P-3c1: + spacegroup: P-3c1 + crystal_class: trigonal + hall: -P 3 2"c + hermann_mauguin: P -3 c 1 + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z+0.5', '-x,-x+y,-z+0.5', 'x-y,-y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z-0.5', 'x,x-y,z-0.5', '-x+y,y,z-0.5'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z+0.5', '-x,-x+y,-z+0.5', 'x-y,-y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z-0.5', 'x,x-y,z-0.5', '-x+y,y,z-0.5'] + number: 165 + schoenflies: D3d^4 + universal_h_m: P -3 c 1 + R-3m: + spacegroup: R-3m + crystal_class: rhombohedral + hall: -R 3 2" + hermann_mauguin: R -3 m + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z', 'x+0.667,y+0.333,z+0.333', + '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', 'y+0.667,x+0.333,-z+0.333', + '-x+0.667,-x+y+0.333,-z+0.333', 'x-y+0.667,-y+0.333,-z+0.333', '-x+0.667,-y+0.333,-z+0.333', + 'y+0.667,-x+y+0.333,-z+0.333', 'x-y+0.667,x+0.333,-z+0.333', '-y+0.667,-x+0.333,z+0.333', + 'x+0.667,x-y+0.333,z+0.333', '-x+y+0.667,y+0.333,z+0.333', 'x+0.333,y+0.667,z+0.667', + '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', 'y+0.333,x+0.667,-z+0.667', + '-x+0.333,-x+y+0.667,-z+0.667', 'x-y+0.333,-y+0.667,-z+0.667', '-x+0.333,-y+0.667,-z+0.667', + 'y+0.333,-x+y+0.667,-z+0.667', 'x-y+0.333,x+0.667,-z+0.667', '-y+0.333,-x+0.667,z+0.667', + 'x+0.333,x-y+0.667,z+0.667', '-x+y+0.333,y+0.667,z+0.667'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z', '-x,-x+y,-z', 'x-y,-y,-z', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z', 'x,x-y,z', '-x+y,y,z'] + number: 166 + schoenflies: D3d^5 + universal_h_m: R -3 m :H + R-3c: + spacegroup: R-3c + crystal_class: rhombohedral + hall: -R 3 2"c + hermann_mauguin: R -3 c + symops: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z+0.5', '-x,-x+y,-z+0.5', 'x-y,-y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z-0.5', 'x,x-y,z-0.5', '-x+y,y,z-0.5', + 'x+0.667,y+0.333,z+0.333', '-y+0.667,x-y+0.333,z+0.333', '-x+y+0.667,-x+0.333,z+0.333', + 'y+0.667,x+0.333,-z+0.833', '-x+0.667,-x+y+0.333,-z+0.833', 'x-y+0.667,-y+0.333,-z+0.833', + '-x+0.667,-y+0.333,-z+0.333', 'y+0.667,-x+y+0.333,-z+0.333', 'x-y+0.667,x+0.333,-z+0.333', + '-y+0.667,-x+0.333,z-0.167', 'x+0.667,x-y+0.333,z-0.167', '-x+y+0.667,y+0.333,z-0.167', + 'x+0.333,y+0.667,z+0.667', '-y+0.333,x-y+0.667,z+0.667', '-x+y+0.333,-x+0.667,z+0.667', + 'y+0.333,x+0.667,-z+1.17', '-x+0.333,-x+y+0.667,-z+1.17', 'x-y+0.333,-y+0.667,-z+1.17', + '-x+0.333,-y+0.667,-z+0.667', 'y+0.333,-x+y+0.667,-z+0.667', 'x-y+0.333,x+0.667,-z+0.667', + '-y+0.333,-x+0.667,z+0.167', 'x+0.333,x-y+0.667,z+0.167', '-x+y+0.333,y+0.667,z+0.167'] + ncsym: ['x,y,z', '-y,x-y,z', '-x+y,-x,z', 'y,x,-z+0.5', '-x,-x+y,-z+0.5', 'x-y,-y,-z+0.5', + '-x,-y,-z', 'y,-x+y,-z', 'x-y,x,-z', '-y,-x,z-0.5', 'x,x-y,z-0.5', '-x+y,y,z-0.5'] + number: 167 + schoenflies: D3d^6 + universal_h_m: R -3 c :H + P6: + spacegroup: P6 + crystal_class: hexagonal + hall: ' P 6' + hermann_mauguin: P 6 + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z'] + number: 168 + schoenflies: C6^1 + universal_h_m: P 6 + P61: + spacegroup: P61 + crystal_class: hexagonal + hall: ' P 61' + hermann_mauguin: P 61 + symops: ['x,y,z', 'x-y,x,z+0.167', '-y,x-y,z+0.333', '-x,-y,z+0.5', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.833'] + ncsym: ['x,y,z', 'x-y,x,z+0.167', '-y,x-y,z+0.333', '-x,-y,z+0.5', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.833'] + number: 169 + schoenflies: C6^2 + universal_h_m: P 61 + P6_5: + spacegroup: P6_5 + crystal_class: hexagonal + hall: ' P 65' + hermann_mauguin: P 65 + symops: ['x,y,z', 'x-y,x,z+0.833', '-y,x-y,z+0.667', '-x,-y,z+0.5', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.167'] + ncsym: ['x,y,z', 'x-y,x,z+0.833', '-y,x-y,z+0.667', '-x,-y,z+0.5', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.167'] + number: 170 + schoenflies: C6^3 + universal_h_m: P 65 + P62: + spacegroup: P62 + crystal_class: hexagonal + hall: ' P 62' + hermann_mauguin: P 62 + symops: ['x,y,z', 'x-y,x,z+0.333', '-y,x-y,z+0.667', '-x,-y,z', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.667'] + ncsym: ['x,y,z', 'x-y,x,z+0.333', '-y,x-y,z+0.667', '-x,-y,z', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.667'] + number: 171 + schoenflies: C6^4 + universal_h_m: P 62 + P64: + spacegroup: P64 + crystal_class: hexagonal + hall: ' P 64' + hermann_mauguin: P 64 + symops: ['x,y,z', 'x-y,x,z+0.667', '-y,x-y,z+0.333', '-x,-y,z', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.333'] + ncsym: ['x,y,z', 'x-y,x,z+0.667', '-y,x-y,z+0.333', '-x,-y,z', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.333'] + number: 172 + schoenflies: C6^5 + universal_h_m: P 64 + P63: + spacegroup: P63 + crystal_class: hexagonal + hall: ' P 6c' + hermann_mauguin: P 63 + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5'] + number: 173 + schoenflies: C6^6 + universal_h_m: P 63 + P-6: + spacegroup: P-6 + crystal_class: hexagonal + hall: ' P -6' + hermann_mauguin: P -6 + symops: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z'] + ncsym: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z'] + number: 174 + schoenflies: C3h^1 + universal_h_m: P -6 + P6/m: + spacegroup: P6/m + crystal_class: hexagonal + hall: -P 6 + hermann_mauguin: P 6/m + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-x,-y,-z', + '-x+y,-x,-z', 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-x,-y,-z', + '-x+y,-x,-z', 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z'] + number: 175 + schoenflies: C6h^1 + universal_h_m: P 6/m + P63/m: + spacegroup: P63/m + crystal_class: hexagonal + hall: -P 6c + hermann_mauguin: P 63/m + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5'] + number: 176 + schoenflies: C6h^2 + universal_h_m: P 63/m + P622: + spacegroup: P622 + crystal_class: hexagonal + hall: ' P 6 2' + hermann_mauguin: P 6 2 2 + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z', + 'x-y,-y,-z', 'x,x-y,-z', 'y,x,-z', '-x+y,y,-z', '-x,-x+y,-z'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z', + 'x-y,-y,-z', 'x,x-y,-z', 'y,x,-z', '-x+y,y,-z', '-x,-x+y,-z'] + number: 177 + schoenflies: D6^1 + universal_h_m: P 6 2 2 + P6122: + spacegroup: P6122 + crystal_class: hexagonal + hall: ' P 61 2 (0 0 5)' + hermann_mauguin: P 61 2 2 + symops: ['x,y,z', 'x-y,x,z+0.167', '-y,x-y,z+0.333', '-x,-y,z+0.5', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.833', '-y,-x,-z+0.833', 'x-y,-y,-z', 'x,x-y,-z+0.167', 'y,x,-z+0.333', + '-x+y,y,-z+0.5', '-x,-x+y,-z+0.667'] + ncsym: ['x,y,z', 'x-y,x,z+0.167', '-y,x-y,z+0.333', '-x,-y,z+0.5', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.833', '-y,-x,-z+0.833', 'x-y,-y,-z', 'x,x-y,-z+0.167', 'y,x,-z+0.333', + '-x+y,y,-z+0.5', '-x,-x+y,-z+0.667'] + number: 178 + schoenflies: D6^2 + universal_h_m: P 61 2 2 + P6_522: + spacegroup: P6_522 + crystal_class: hexagonal + hall: ' P 65 2 (0 0 1)' + hermann_mauguin: P 65 2 2 + symops: ['x,y,z', 'x-y,x,z+0.833', '-y,x-y,z+0.667', '-x,-y,z+0.5', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.167', '-y,-x,-z+0.167', 'x-y,-y,-z', 'x,x-y,-z+0.833', 'y,x,-z+0.667', + '-x+y,y,-z+0.5', '-x,-x+y,-z+0.333'] + ncsym: ['x,y,z', 'x-y,x,z+0.833', '-y,x-y,z+0.667', '-x,-y,z+0.5', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.167', '-y,-x,-z+0.167', 'x-y,-y,-z', 'x,x-y,-z+0.833', 'y,x,-z+0.667', + '-x+y,y,-z+0.5', '-x,-x+y,-z+0.333'] + number: 179 + schoenflies: D6^3 + universal_h_m: P 65 2 2 + P6222: + spacegroup: P6222 + crystal_class: hexagonal + hall: ' P 62 2 (0 0 4)' + hermann_mauguin: P 62 2 2 + symops: ['x,y,z', 'x-y,x,z+0.333', '-y,x-y,z+0.667', '-x,-y,z', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.667', '-y,-x,-z+0.667', 'x-y,-y,-z', 'x,x-y,-z+0.333', 'y,x,-z+0.667', + '-x+y,y,-z', '-x,-x+y,-z+0.333'] + ncsym: ['x,y,z', 'x-y,x,z+0.333', '-y,x-y,z+0.667', '-x,-y,z', '-x+y,-x,z+0.333', + 'y,-x+y,z+0.667', '-y,-x,-z+0.667', 'x-y,-y,-z', 'x,x-y,-z+0.333', 'y,x,-z+0.667', + '-x+y,y,-z', '-x,-x+y,-z+0.333'] + number: 180 + schoenflies: D6^4 + universal_h_m: P 62 2 2 + P6422: + spacegroup: P6422 + crystal_class: hexagonal + hall: ' P 64 2 (0 0 2)' + hermann_mauguin: P 64 2 2 + symops: ['x,y,z', 'x-y,x,z+0.667', '-y,x-y,z+0.333', '-x,-y,z', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.333', '-y,-x,-z+0.333', 'x-y,-y,-z', 'x,x-y,-z+0.667', 'y,x,-z+0.333', + '-x+y,y,-z', '-x,-x+y,-z+0.667'] + ncsym: ['x,y,z', 'x-y,x,z+0.667', '-y,x-y,z+0.333', '-x,-y,z', '-x+y,-x,z+0.667', + 'y,-x+y,z+0.333', '-y,-x,-z+0.333', 'x-y,-y,-z', 'x,x-y,-z+0.667', 'y,x,-z+0.333', + '-x+y,y,-z', '-x,-x+y,-z+0.667'] + number: 181 + schoenflies: D6^5 + universal_h_m: P 64 2 2 + P6322: + spacegroup: P6322 + crystal_class: hexagonal + hall: ' P 6c 2c' + hermann_mauguin: P 63 2 2 + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z+0.5', 'x-y,-y,-z', 'x,x-y,-z+0.5', 'y,x,-z', '-x+y,y,-z+0.5', '-x,-x+y,-z'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z+0.5', 'x-y,-y,-z', 'x,x-y,-z+0.5', 'y,x,-z', '-x+y,y,-z+0.5', '-x,-x+y,-z'] + number: 182 + schoenflies: D6^6 + universal_h_m: P 63 2 2 + P6mm: + spacegroup: P6mm + crystal_class: hexagonal + hall: ' P 6 -2' + hermann_mauguin: P 6 m m + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', 'y,x,z', + '-x+y,y,z', '-x,-x+y,z', '-y,-x,z', 'x-y,-y,z', 'x,x-y,z'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', 'y,x,z', + '-x+y,y,z', '-x,-x+y,z', '-y,-x,z', 'x-y,-y,z', 'x,x-y,z'] + number: 183 + schoenflies: C6v^1 + universal_h_m: P 6 m m + P6cc: + spacegroup: P6cc + crystal_class: hexagonal + hall: ' P 6 -2c' + hermann_mauguin: P 6 c c + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', 'y,x,z+0.5', + '-x+y,y,z+0.5', '-x,-x+y,z+0.5', '-y,-x,z+0.5', 'x-y,-y,z+0.5', 'x,x-y,z+0.5'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', 'y,x,z+0.5', + '-x+y,y,z+0.5', '-x,-x+y,z+0.5', '-y,-x,z+0.5', 'x-y,-y,z+0.5', 'x,x-y,z+0.5'] + number: 184 + schoenflies: C6v^2 + universal_h_m: P 6 c c + P63cm: + spacegroup: P63cm + crystal_class: hexagonal + hall: ' P 6c -2' + hermann_mauguin: P 63 c m + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + 'y,x,z', '-x+y,y,z+0.5', '-x,-x+y,z', '-y,-x,z+0.5', 'x-y,-y,z', 'x,x-y,z+0.5'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + 'y,x,z', '-x+y,y,z+0.5', '-x,-x+y,z', '-y,-x,z+0.5', 'x-y,-y,z', 'x,x-y,z+0.5'] + number: 185 + schoenflies: C6v^3 + universal_h_m: P 63 c m + P63mc: + spacegroup: P63mc + crystal_class: hexagonal + hall: ' P 6c -2c' + hermann_mauguin: P 63 m c + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + 'y,x,z+0.5', '-x+y,y,z', '-x,-x+y,z+0.5', '-y,-x,z', 'x-y,-y,z+0.5', 'x,x-y,z'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + 'y,x,z+0.5', '-x+y,y,z', '-x,-x+y,z+0.5', '-y,-x,z', 'x-y,-y,z+0.5', 'x,x-y,z'] + number: 186 + schoenflies: C6v^4 + universal_h_m: P 63 m c + P-6m2: + spacegroup: P-6m2 + crystal_class: hexagonal + hall: ' P -6 2' + hermann_mauguin: P -6 m 2 + symops: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z', + '-y,-x,-z', '-x+y,y,z', 'x,x-y,-z', '-y,-x,z', '-x+y,y,-z', 'x,x-y,z'] + ncsym: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z', + '-y,-x,-z', '-x+y,y,z', 'x,x-y,-z', '-y,-x,z', '-x+y,y,-z', 'x,x-y,z'] + number: 187 + schoenflies: D3h^1 + universal_h_m: P -6 m 2 + P-6c2: + spacegroup: P-6c2 + crystal_class: hexagonal + hall: ' P -6c 2' + hermann_mauguin: P -6 c 2 + symops: ['x,y,z', '-x+y,-x,-z+0.5', '-y,x-y,z', 'x,y,-z+0.5', '-x+y,-x,z', '-y,x-y,-z+0.5', + '-y,-x,-z', '-x+y,y,z+0.5', 'x,x-y,-z', '-y,-x,z+0.5', '-x+y,y,-z', 'x,x-y,z+0.5'] + ncsym: ['x,y,z', '-x+y,-x,-z+0.5', '-y,x-y,z', 'x,y,-z+0.5', '-x+y,-x,z', '-y,x-y,-z+0.5', + '-y,-x,-z', '-x+y,y,z+0.5', 'x,x-y,-z', '-y,-x,z+0.5', '-x+y,y,-z', 'x,x-y,z+0.5'] + number: 188 + schoenflies: D3h^2 + universal_h_m: P -6 c 2 + P-62m: + spacegroup: P-62m + crystal_class: hexagonal + hall: ' P -6 -2' + hermann_mauguin: P -6 2 m + symops: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z', + 'y,x,z', 'x-y,-y,-z', '-x,-x+y,z', 'y,x,-z', 'x-y,-y,z', '-x,-x+y,-z'] + ncsym: ['x,y,z', '-x+y,-x,-z', '-y,x-y,z', 'x,y,-z', '-x+y,-x,z', '-y,x-y,-z', + 'y,x,z', 'x-y,-y,-z', '-x,-x+y,z', 'y,x,-z', 'x-y,-y,z', '-x,-x+y,-z'] + number: 189 + schoenflies: D3h^3 + universal_h_m: P -6 2 m + P-62c: + spacegroup: P-62c + crystal_class: hexagonal + hall: ' P -6c -2c' + hermann_mauguin: P -6 2 c + symops: ['x,y,z', '-x+y,-x,-z+0.5', '-y,x-y,z', 'x,y,-z+0.5', '-x+y,-x,z', '-y,x-y,-z+0.5', + 'y,x,z+0.5', 'x-y,-y,-z', '-x,-x+y,z+0.5', 'y,x,-z', 'x-y,-y,z+0.5', '-x,-x+y,-z'] + ncsym: ['x,y,z', '-x+y,-x,-z+0.5', '-y,x-y,z', 'x,y,-z+0.5', '-x+y,-x,z', '-y,x-y,-z+0.5', + 'y,x,z+0.5', 'x-y,-y,-z', '-x,-x+y,z+0.5', 'y,x,-z', 'x-y,-y,z+0.5', '-x,-x+y,-z'] + number: 190 + schoenflies: D3h^4 + universal_h_m: P -6 2 c + P6/mmm: + spacegroup: P6/mmm + crystal_class: hexagonal + hall: -P 6 2 + hermann_mauguin: P 6/m m m + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z', + 'x-y,-y,-z', 'x,x-y,-z', 'y,x,-z', '-x+y,y,-z', '-x,-x+y,-z', '-x,-y,-z', '-x+y,-x,-z', + 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z', 'y,x,z', '-x+y,y,z', '-x,-x+y,z', + '-y,-x,z', 'x-y,-y,z', 'x,x-y,z'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z', + 'x-y,-y,-z', 'x,x-y,-z', 'y,x,-z', '-x+y,y,-z', '-x,-x+y,-z', '-x,-y,-z', '-x+y,-x,-z', + 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z', 'y,x,z', '-x+y,y,z', '-x,-x+y,z', + '-y,-x,z', 'x-y,-y,z', 'x,x-y,z'] + number: 191 + schoenflies: D6h^1 + universal_h_m: P 6/m m m + P6/mcc: + spacegroup: P6/mcc + crystal_class: hexagonal + hall: -P 6 2c + hermann_mauguin: P 6/m c c + symops: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z+0.5', + 'x-y,-y,-z+0.5', 'x,x-y,-z+0.5', 'y,x,-z+0.5', '-x+y,y,-z+0.5', '-x,-x+y,-z+0.5', + '-x,-y,-z', '-x+y,-x,-z', 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z', 'y,x,z-0.5', + '-x+y,y,z-0.5', '-x,-x+y,z-0.5', '-y,-x,z-0.5', 'x-y,-y,z-0.5', 'x,x-y,z-0.5'] + ncsym: ['x,y,z', 'x-y,x,z', '-y,x-y,z', '-x,-y,z', '-x+y,-x,z', 'y,-x+y,z', '-y,-x,-z+0.5', + 'x-y,-y,-z+0.5', 'x,x-y,-z+0.5', 'y,x,-z+0.5', '-x+y,y,-z+0.5', '-x,-x+y,-z+0.5', + '-x,-y,-z', '-x+y,-x,-z', 'y,-x+y,-z', 'x,y,-z', 'x-y,x,-z', '-y,x-y,-z', 'y,x,z-0.5', + '-x+y,y,z-0.5', '-x,-x+y,z-0.5', '-y,-x,z-0.5', 'x-y,-y,z-0.5', 'x,x-y,z-0.5'] + number: 192 + schoenflies: D6h^2 + universal_h_m: P 6/m c c + P63/mcm: + spacegroup: P63/mcm + crystal_class: hexagonal + hall: -P 6c 2 + hermann_mauguin: P 63/m c m + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z', 'x-y,-y,-z+0.5', 'x,x-y,-z', 'y,x,-z+0.5', '-x+y,y,-z', '-x,-x+y,-z+0.5', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5', + 'y,x,z', '-x+y,y,z-0.5', '-x,-x+y,z', '-y,-x,z-0.5', 'x-y,-y,z', 'x,x-y,z-0.5'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z', 'x-y,-y,-z+0.5', 'x,x-y,-z', 'y,x,-z+0.5', '-x+y,y,-z', '-x,-x+y,-z+0.5', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5', + 'y,x,z', '-x+y,y,z-0.5', '-x,-x+y,z', '-y,-x,z-0.5', 'x-y,-y,z', 'x,x-y,z-0.5'] + number: 193 + schoenflies: D6h^3 + universal_h_m: P 63/m c m + P63/mmc: + spacegroup: P63/mmc + crystal_class: hexagonal + hall: -P 6c 2c + hermann_mauguin: P 63/m m c + symops: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z+0.5', 'x-y,-y,-z', 'x,x-y,-z+0.5', 'y,x,-z', '-x+y,y,-z+0.5', '-x,-x+y,-z', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5', + 'y,x,z-0.5', '-x+y,y,z', '-x,-x+y,z-0.5', '-y,-x,z', 'x-y,-y,z-0.5', 'x,x-y,z'] + ncsym: ['x,y,z', 'x-y,x,z+0.5', '-y,x-y,z', '-x,-y,z+0.5', '-x+y,-x,z', 'y,-x+y,z+0.5', + '-y,-x,-z+0.5', 'x-y,-y,-z', 'x,x-y,-z+0.5', 'y,x,-z', '-x+y,y,-z+0.5', '-x,-x+y,-z', + '-x,-y,-z', '-x+y,-x,-z-0.5', 'y,-x+y,-z', 'x,y,-z-0.5', 'x-y,x,-z', '-y,x-y,-z-0.5', + 'y,x,z-0.5', '-x+y,y,z', '-x,-x+y,z-0.5', '-y,-x,z', 'x-y,-y,z-0.5', 'x,x-y,z'] + number: 194 + schoenflies: D6h^4 + universal_h_m: P 63/m m c + P23: + spacegroup: P23 + crystal_class: cubic + hall: ' P 2 2 3' + hermann_mauguin: P 2 3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x'] + number: 195 + schoenflies: T^1 + universal_h_m: P 2 3 + F23: + spacegroup: F23 + crystal_class: cubic + hall: ' F 2 2 3' + hermann_mauguin: F 2 3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', + 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x+0.5,y+0.5', '-z,-x+0.5,y+0.5', 'z,-x+0.5,-y+0.5', + '-z,x+0.5,-y+0.5', 'y,z+0.5,x+0.5', 'y,-z+0.5,-x+0.5', '-y,z+0.5,-x+0.5', '-y,-z+0.5,x+0.5', + 'x+0.5,y,z+0.5', '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', '-x+0.5,y,-z+0.5', 'z+0.5,x,y+0.5', + '-z+0.5,-x,y+0.5', 'z+0.5,-x,-y+0.5', '-z+0.5,x,-y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z,-x+0.5', + '-y+0.5,z,-x+0.5', '-y+0.5,-z,x+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', + '-x+0.5,y+0.5,-z', 'z+0.5,x+0.5,y', '-z+0.5,-x+0.5,y', 'z+0.5,-x+0.5,-y', '-z+0.5,x+0.5,-y', + 'y+0.5,z+0.5,x', 'y+0.5,-z+0.5,-x', '-y+0.5,z+0.5,-x', '-y+0.5,-z+0.5,x'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x'] + number: 196 + schoenflies: T^2 + universal_h_m: F 2 3 + I23: + spacegroup: I23 + crystal_class: cubic + hall: ' I 2 2 3' + hermann_mauguin: I 2 3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'x+0.5,-y+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', 'z+0.5,x+0.5,y+0.5', '-z+0.5,-x+0.5,y+0.5', + 'z+0.5,-x+0.5,-y+0.5', '-z+0.5,x+0.5,-y+0.5', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+0.5', + '-y+0.5,z+0.5,-x+0.5', '-y+0.5,-z+0.5,x+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x'] + number: 197 + schoenflies: T^3 + universal_h_m: I 2 3 + P213: + spacegroup: P213 + crystal_class: cubic + hall: ' P 2ac 2ab 3' + hermann_mauguin: P 21 3 + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', 'z,x,y', + '-z+0.5,-x,y+0.5', 'z+0.5,-x+0.5,-y', '-z,x+0.5,-y+0.5', 'y,z,x', 'y+0.5,-z+0.5,-x', + '-y,z+0.5,-x+0.5', '-y+0.5,-z,x+0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', 'z,x,y', + '-z+0.5,-x,y+0.5', 'z+0.5,-x+0.5,-y', '-z,x+0.5,-y+0.5', 'y,z,x', 'y+0.5,-z+0.5,-x', + '-y,z+0.5,-x+0.5', '-y+0.5,-z,x+0.5'] + number: 198 + schoenflies: T^4 + universal_h_m: P 21 3 + I213: + spacegroup: I213 + crystal_class: cubic + hall: ' I 2b 2c 3' + hermann_mauguin: I 21 3 + symops: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x,y', '-z,-x+0.5,y', + 'z,-x,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z,x', 'y,-z,-x+0.5', '-y,z+0.5,-x+0.5', + '-y+0.5,-z,x+0.5', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+1,z+0.5', 'x+0.5,-y+0.5,-z+1', + '-x+0.5,y+1,-z+1', 'z+0.5,x+0.5,y+0.5', '-z+0.5,-x+1,y+0.5', 'z+0.5,-x+0.5,-y+1', + '-z+0.5,x+1,-y+1', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+1', '-y+0.5,z+1,-x+1', + '-y+1,-z+0.5,x+1'] + ncsym: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x,y', '-z,-x+0.5,y', + 'z,-x,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z,x', 'y,-z,-x+0.5', '-y,z+0.5,-x+0.5', + '-y+0.5,-z,x+0.5'] + number: 199 + schoenflies: T^5 + universal_h_m: I 21 3 + Pm-3: + spacegroup: Pm-3 + crystal_class: cubic + hall: -P 2 2 3 + hermann_mauguin: P m -3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x'] + number: 200 + schoenflies: Th^1 + universal_h_m: P m -3 + Pn-3: + spacegroup: Pn-3 + crystal_class: cubic + hall: ' P 2 2 3 -1n' + hermann_mauguin: P n -3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x+0.5,-y+0.5,-z+0.5', + 'x+0.5,y+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', + 'z+0.5,x+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', 'z+0.5,-x+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', + '-y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,x+0.5', 'y+0.5,z+0.5,-x+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x+0.5,-y+0.5,-z+0.5', + 'x+0.5,y+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', + 'z+0.5,x+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', 'z+0.5,-x+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', + '-y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,x+0.5', 'y+0.5,z+0.5,-x+0.5'] + number: 201 + schoenflies: Th^2 + universal_h_m: P n -3 :1 + Fm-3: + spacegroup: Fm-3 + crystal_class: cubic + hall: -F 2 2 3 + hermann_mauguin: F m -3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x', 'x,y+0.5,z+0.5', '-x,-y+0.5,z+0.5', 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', + 'z,x+0.5,y+0.5', '-z,-x+0.5,y+0.5', 'z,-x+0.5,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z+0.5,x+0.5', + 'y,-z+0.5,-x+0.5', '-y,z+0.5,-x+0.5', '-y,-z+0.5,x+0.5', '-x,-y+0.5,-z+0.5', + 'x,y+0.5,-z+0.5', '-x,y+0.5,z+0.5', 'x,-y+0.5,z+0.5', '-z,-x+0.5,-y+0.5', 'z,x+0.5,-y+0.5', + '-z,x+0.5,y+0.5', 'z,-x+0.5,y+0.5', '-y,-z+0.5,-x+0.5', '-y,z+0.5,x+0.5', 'y,-z+0.5,x+0.5', + 'y,z+0.5,-x+0.5', 'x+0.5,y,z+0.5', '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', '-x+0.5,y,-z+0.5', + 'z+0.5,x,y+0.5', '-z+0.5,-x,y+0.5', 'z+0.5,-x,-y+0.5', '-z+0.5,x,-y+0.5', 'y+0.5,z,x+0.5', + 'y+0.5,-z,-x+0.5', '-y+0.5,z,-x+0.5', '-y+0.5,-z,x+0.5', '-x+0.5,-y,-z+0.5', + 'x+0.5,y,-z+0.5', '-x+0.5,y,z+0.5', 'x+0.5,-y,z+0.5', '-z+0.5,-x,-y+0.5', 'z+0.5,x,-y+0.5', + '-z+0.5,x,y+0.5', 'z+0.5,-x,y+0.5', '-y+0.5,-z,-x+0.5', '-y+0.5,z,x+0.5', 'y+0.5,-z,x+0.5', + 'y+0.5,z,-x+0.5', 'x+0.5,y+0.5,z', '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', + 'z+0.5,x+0.5,y', '-z+0.5,-x+0.5,y', 'z+0.5,-x+0.5,-y', '-z+0.5,x+0.5,-y', 'y+0.5,z+0.5,x', + 'y+0.5,-z+0.5,-x', '-y+0.5,z+0.5,-x', '-y+0.5,-z+0.5,x', '-x+0.5,-y+0.5,-z', + 'x+0.5,y+0.5,-z', '-x+0.5,y+0.5,z', 'x+0.5,-y+0.5,z', '-z+0.5,-x+0.5,-y', 'z+0.5,x+0.5,-y', + '-z+0.5,x+0.5,y', 'z+0.5,-x+0.5,y', '-y+0.5,-z+0.5,-x', '-y+0.5,z+0.5,x', 'y+0.5,-z+0.5,x', + 'y+0.5,z+0.5,-x'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x'] + number: 202 + schoenflies: Th^3 + universal_h_m: F m -3 + Fd-3: + spacegroup: Fd-3 + crystal_class: cubic + hall: ' F 2 2 3 -1d' + hermann_mauguin: F d -3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x+0.25,-y+0.25,-z+0.25', + 'x+0.25,y+0.25,-z+0.25', '-x+0.25,y+0.25,z+0.25', 'x+0.25,-y+0.25,z+0.25', '-z+0.25,-x+0.25,-y+0.25', + 'z+0.25,x+0.25,-y+0.25', '-z+0.25,x+0.25,y+0.25', 'z+0.25,-x+0.25,y+0.25', '-y+0.25,-z+0.25,-x+0.25', + '-y+0.25,z+0.25,x+0.25', 'y+0.25,-z+0.25,x+0.25', 'y+0.25,z+0.25,-x+0.25', 'x,y+0.5,z+0.5', + '-x,-y+0.5,z+0.5', 'x,-y+0.5,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x+0.5,y+0.5', '-z,-x+0.5,y+0.5', + 'z,-x+0.5,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z+0.5,x+0.5', 'y,-z+0.5,-x+0.5', '-y,z+0.5,-x+0.5', + '-y,-z+0.5,x+0.5', '-x+0.25,-y+0.75,-z+0.75', 'x+0.25,y+0.75,-z+0.75', '-x+0.25,y+0.75,z+0.75', + 'x+0.25,-y+0.75,z+0.75', '-z+0.25,-x+0.75,-y+0.75', 'z+0.25,x+0.75,-y+0.75', + '-z+0.25,x+0.75,y+0.75', 'z+0.25,-x+0.75,y+0.75', '-y+0.25,-z+0.75,-x+0.75', + '-y+0.25,z+0.75,x+0.75', 'y+0.25,-z+0.75,x+0.75', 'y+0.25,z+0.75,-x+0.75', 'x+0.5,y,z+0.5', + '-x+0.5,-y,z+0.5', 'x+0.5,-y,-z+0.5', '-x+0.5,y,-z+0.5', 'z+0.5,x,y+0.5', '-z+0.5,-x,y+0.5', + 'z+0.5,-x,-y+0.5', '-z+0.5,x,-y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z,-x+0.5', '-y+0.5,z,-x+0.5', + '-y+0.5,-z,x+0.5', '-x+0.75,-y+0.25,-z+0.75', 'x+0.75,y+0.25,-z+0.75', '-x+0.75,y+0.25,z+0.75', + 'x+0.75,-y+0.25,z+0.75', '-z+0.75,-x+0.25,-y+0.75', 'z+0.75,x+0.25,-y+0.75', + '-z+0.75,x+0.25,y+0.75', 'z+0.75,-x+0.25,y+0.75', '-y+0.75,-z+0.25,-x+0.75', + '-y+0.75,z+0.25,x+0.75', 'y+0.75,-z+0.25,x+0.75', 'y+0.75,z+0.25,-x+0.75', 'x+0.5,y+0.5,z', + '-x+0.5,-y+0.5,z', 'x+0.5,-y+0.5,-z', '-x+0.5,y+0.5,-z', 'z+0.5,x+0.5,y', '-z+0.5,-x+0.5,y', + 'z+0.5,-x+0.5,-y', '-z+0.5,x+0.5,-y', 'y+0.5,z+0.5,x', 'y+0.5,-z+0.5,-x', '-y+0.5,z+0.5,-x', + '-y+0.5,-z+0.5,x', '-x+0.75,-y+0.75,-z+0.25', 'x+0.75,y+0.75,-z+0.25', '-x+0.75,y+0.75,z+0.25', + 'x+0.75,-y+0.75,z+0.25', '-z+0.75,-x+0.75,-y+0.25', 'z+0.75,x+0.75,-y+0.25', + '-z+0.75,x+0.75,y+0.25', 'z+0.75,-x+0.75,y+0.25', '-y+0.75,-z+0.75,-x+0.25', + '-y+0.75,z+0.75,x+0.25', 'y+0.75,-z+0.75,x+0.25', 'y+0.75,z+0.75,-x+0.25'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x+0.25,-y+0.25,-z+0.25', + 'x+0.25,y+0.25,-z+0.25', '-x+0.25,y+0.25,z+0.25', 'x+0.25,-y+0.25,z+0.25', '-z+0.25,-x+0.25,-y+0.25', + 'z+0.25,x+0.25,-y+0.25', '-z+0.25,x+0.25,y+0.25', 'z+0.25,-x+0.25,y+0.25', '-y+0.25,-z+0.25,-x+0.25', + '-y+0.25,z+0.25,x+0.25', 'y+0.25,-z+0.25,x+0.25', 'y+0.25,z+0.25,-x+0.25'] + number: 203 + schoenflies: Th^4 + universal_h_m: F d -3 :1 + Im-3: + spacegroup: Im-3 + crystal_class: cubic + hall: -I 2 2 3 + hermann_mauguin: I m -3 + symops: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', + '-x+0.5,y+0.5,-z+0.5', 'z+0.5,x+0.5,y+0.5', '-z+0.5,-x+0.5,y+0.5', 'z+0.5,-x+0.5,-y+0.5', + '-z+0.5,x+0.5,-y+0.5', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,-x+0.5', + '-y+0.5,-z+0.5,x+0.5', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', + 'x+0.5,-y+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', 'z+0.5,x+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', + 'z+0.5,-x+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,x+0.5', + 'y+0.5,z+0.5,-x+0.5'] + ncsym: ['x,y,z', '-x,-y,z', 'x,-y,-z', '-x,y,-z', 'z,x,y', '-z,-x,y', 'z,-x,-y', + '-z,x,-y', 'y,z,x', 'y,-z,-x', '-y,z,-x', '-y,-z,x', '-x,-y,-z', 'x,y,-z', '-x,y,z', + 'x,-y,z', '-z,-x,-y', 'z,x,-y', '-z,x,y', 'z,-x,y', '-y,-z,-x', '-y,z,x', 'y,-z,x', + 'y,z,-x'] + number: 204 + schoenflies: Th^5 + universal_h_m: I m -3 + Pa-3: + spacegroup: Pa-3 + crystal_class: cubic + hall: -P 2ac 2ab 3 + hermann_mauguin: P a -3 + symops: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', 'z,x,y', + '-z+0.5,-x,y+0.5', 'z+0.5,-x+0.5,-y', '-z,x+0.5,-y+0.5', 'y,z,x', 'y+0.5,-z+0.5,-x', + '-y,z+0.5,-x+0.5', '-y+0.5,-z,x+0.5', '-x,-y,-z', 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z', + 'x,-y-0.5,z-0.5', '-z,-x,-y', 'z-0.5,x,-y-0.5', '-z-0.5,x-0.5,y', 'z,-x-0.5,y-0.5', + '-y,-z,-x', '-y-0.5,z-0.5,x', 'y,-z-0.5,x-0.5', 'y-0.5,z,-x-0.5'] + ncsym: ['x,y,z', '-x+0.5,-y,z+0.5', 'x+0.5,-y+0.5,-z', '-x,y+0.5,-z+0.5', 'z,x,y', + '-z+0.5,-x,y+0.5', 'z+0.5,-x+0.5,-y', '-z,x+0.5,-y+0.5', 'y,z,x', 'y+0.5,-z+0.5,-x', + '-y,z+0.5,-x+0.5', '-y+0.5,-z,x+0.5', '-x,-y,-z', 'x-0.5,y,-z-0.5', '-x-0.5,y-0.5,z', + 'x,-y-0.5,z-0.5', '-z,-x,-y', 'z-0.5,x,-y-0.5', '-z-0.5,x-0.5,y', 'z,-x-0.5,y-0.5', + '-y,-z,-x', '-y-0.5,z-0.5,x', 'y,-z-0.5,x-0.5', 'y-0.5,z,-x-0.5'] + number: 205 + schoenflies: Th^6 + universal_h_m: P a -3 + Ia-3: + spacegroup: Ia-3 + crystal_class: cubic + hall: -I 2b 2c 3 + hermann_mauguin: I a -3 + symops: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x,y', '-z,-x+0.5,y', + 'z,-x,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z,x', 'y,-z,-x+0.5', '-y,z+0.5,-x+0.5', + '-y+0.5,-z,x+0.5', '-x,-y,-z', 'x,y-0.5,-z', '-x,y,z-0.5', 'x,-y-0.5,z-0.5', + '-z,-x,-y', 'z,x-0.5,-y', '-z,x,y-0.5', 'z,-x-0.5,y-0.5', '-y,-z,-x', '-y,z,x-0.5', + 'y,-z-0.5,x-0.5', 'y-0.5,z,-x-0.5', 'x+0.5,y+0.5,z+0.5', '-x+0.5,-y+1,z+0.5', + 'x+0.5,-y+0.5,-z+1', '-x+0.5,y+1,-z+1', 'z+0.5,x+0.5,y+0.5', '-z+0.5,-x+1,y+0.5', + 'z+0.5,-x+0.5,-y+1', '-z+0.5,x+1,-y+1', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+1', + '-y+0.5,z+1,-x+1', '-y+1,-z+0.5,x+1', '-x+0.5,-y+0.5,-z+0.5', 'x+0.5,y,-z+0.5', + '-x+0.5,y+0.5,z', 'x+0.5,-y,z', '-z+0.5,-x+0.5,-y+0.5', 'z+0.5,x,-y+0.5', '-z+0.5,x+0.5,y', + 'z+0.5,-x,y', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x', 'y+0.5,-z,x', 'y,z+0.5,-x'] + ncsym: ['x,y,z', '-x,-y+0.5,z', 'x,-y,-z+0.5', '-x,y+0.5,-z+0.5', 'z,x,y', '-z,-x+0.5,y', + 'z,-x,-y+0.5', '-z,x+0.5,-y+0.5', 'y,z,x', 'y,-z,-x+0.5', '-y,z+0.5,-x+0.5', + '-y+0.5,-z,x+0.5', '-x,-y,-z', 'x,y-0.5,-z', '-x,y,z-0.5', 'x,-y-0.5,z-0.5', + '-z,-x,-y', 'z,x-0.5,-y', '-z,x,y-0.5', 'z,-x-0.5,y-0.5', '-y,-z,-x', '-y,z,x-0.5', + 'y,-z-0.5,x-0.5', 'y-0.5,z,-x-0.5'] + number: 206 + schoenflies: Th^7 + universal_h_m: I a -3 + P432: + spacegroup: P432 + crystal_class: cubic + hall: ' P 4 2 3' + hermann_mauguin: P 4 3 2 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x'] + number: 207 + schoenflies: O^1 + universal_h_m: P 4 3 2 + P4232: + spacegroup: P4232 + crystal_class: cubic + hall: ' P 4n 2 3' + hermann_mauguin: P 42 3 2 + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5'] + number: 208 + schoenflies: O^2 + universal_h_m: P 42 3 2 + F432: + spacegroup: F432 + crystal_class: cubic + hall: ' F 4 2 3' + hermann_mauguin: F 4 3 2 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', 'x,y+0.5,z+0.5', '-y,x+0.5,z+0.5', '-x,-y+0.5,z+0.5', 'y,-x+0.5,z+0.5', + 'x,-y+0.5,-z+0.5', 'y,x+0.5,-z+0.5', '-x,y+0.5,-z+0.5', '-y,-x+0.5,-z+0.5', + 'z,x+0.5,y+0.5', '-x,z+0.5,y+0.5', '-z,-x+0.5,y+0.5', 'x,-z+0.5,y+0.5', 'z,-x+0.5,-y+0.5', + 'x,z+0.5,-y+0.5', '-z,x+0.5,-y+0.5', '-x,-z+0.5,-y+0.5', 'y,z+0.5,x+0.5', 'y,-z+0.5,-x+0.5', + 'z,y+0.5,-x+0.5', '-y,z+0.5,-x+0.5', '-z,-y+0.5,-x+0.5', '-y,-z+0.5,x+0.5', + 'z,-y+0.5,x+0.5', '-z,y+0.5,x+0.5', 'x+0.5,y,z+0.5', '-y+0.5,x,z+0.5', '-x+0.5,-y,z+0.5', + 'y+0.5,-x,z+0.5', 'x+0.5,-y,-z+0.5', 'y+0.5,x,-z+0.5', '-x+0.5,y,-z+0.5', '-y+0.5,-x,-z+0.5', + 'z+0.5,x,y+0.5', '-x+0.5,z,y+0.5', '-z+0.5,-x,y+0.5', 'x+0.5,-z,y+0.5', 'z+0.5,-x,-y+0.5', + 'x+0.5,z,-y+0.5', '-z+0.5,x,-y+0.5', '-x+0.5,-z,-y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z,-x+0.5', + 'z+0.5,y,-x+0.5', '-y+0.5,z,-x+0.5', '-z+0.5,-y,-x+0.5', '-y+0.5,-z,x+0.5', + 'z+0.5,-y,x+0.5', '-z+0.5,y,x+0.5', 'x+0.5,y+0.5,z', '-y+0.5,x+0.5,z', '-x+0.5,-y+0.5,z', + 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z', '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z', + 'z+0.5,x+0.5,y', '-x+0.5,z+0.5,y', '-z+0.5,-x+0.5,y', 'x+0.5,-z+0.5,y', 'z+0.5,-x+0.5,-y', + 'x+0.5,z+0.5,-y', '-z+0.5,x+0.5,-y', '-x+0.5,-z+0.5,-y', 'y+0.5,z+0.5,x', 'y+0.5,-z+0.5,-x', + 'z+0.5,y+0.5,-x', '-y+0.5,z+0.5,-x', '-z+0.5,-y+0.5,-x', '-y+0.5,-z+0.5,x', + 'z+0.5,-y+0.5,x', '-z+0.5,y+0.5,x'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x'] + number: 209 + schoenflies: O^3 + universal_h_m: F 4 3 2 + F4132: + spacegroup: F4132 + crystal_class: cubic + hall: ' F 4d 2 3' + hermann_mauguin: F 41 3 2 + symops: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25', 'x,y+0.5,z+0.5', + '-y+0.25,x+0.75,z+0.75', '-x,-y+1,z+1', 'y+0.75,-x+0.75,z+1.25', 'x,-y+0.5,-z+0.5', + 'y+0.25,x+0.75,-z+0.75', '-x,y+1,-z+1', '-y+0.75,-x+0.75,-z+1.25', 'z,x+0.5,y+0.5', + '-x+0.25,z+0.75,y+0.75', '-z,-x+1,y+1', 'x+0.75,-z+0.75,y+1.25', 'z,-x+0.5,-y+0.5', + 'x+0.25,z+0.75,-y+0.75', '-z,x+1,-y+1', '-x+0.75,-z+0.75,-y+1.25', 'y,z+0.5,x+0.5', + 'y+0.5,-z+0.5,-x+1', 'z+0.25,y+1.25,-x+1.25', '-y+0.5,z+1,-x+0.5', '-z+0.25,-y+0.75,-x+0.75', + '-y,-z+0.5,x+0.5', 'z+0.25,-y+1.25,x+1.25', '-z+0.75,y+1.25,x+0.75', 'x+0.5,y,z+0.5', + '-y+0.75,x+0.25,z+0.75', '-x+0.5,-y+0.5,z+1', 'y+1.25,-x+0.25,z+1.25', 'x+0.5,-y,-z+0.5', + 'y+0.75,x+0.25,-z+0.75', '-x+0.5,y+0.5,-z+1', '-y+1.25,-x+0.25,-z+1.25', 'z+0.5,x,y+0.5', + '-x+0.75,z+0.25,y+0.75', '-z+0.5,-x+0.5,y+1', 'x+1.25,-z+0.25,y+1.25', 'z+0.5,-x,-y+0.5', + 'x+0.75,z+0.25,-y+0.75', '-z+0.5,x+0.5,-y+1', '-x+1.25,-z+0.25,-y+1.25', 'y+0.5,z,x+0.5', + 'y+1,-z,-x+1', 'z+0.75,y+0.75,-x+1.25', '-y+1,z+0.5,-x+0.5', '-z+0.75,-y+0.25,-x+0.75', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+1.25', '-z+1.25,y+0.75,x+0.75', 'x+0.5,y+0.5,z', + '-y+0.75,x+0.75,z+0.25', '-x+0.5,-y+1,z+0.5', 'y+1.25,-x+0.75,z+0.75', 'x+0.5,-y+0.5,-z', + 'y+0.75,x+0.75,-z+0.25', '-x+0.5,y+1,-z+0.5', '-y+1.25,-x+0.75,-z+0.75', 'z+0.5,x+0.5,y', + '-x+0.75,z+0.75,y+0.25', '-z+0.5,-x+1,y+0.5', 'x+1.25,-z+0.75,y+0.75', 'z+0.5,-x+0.5,-y', + 'x+0.75,z+0.75,-y+0.25', '-z+0.5,x+1,-y+0.5', '-x+1.25,-z+0.75,-y+0.75', 'y+0.5,z+0.5,x', + 'y+1,-z+0.5,-x+0.5', 'z+0.75,y+1.25,-x+0.75', '-y+1,z+1,-x', '-z+0.75,-y+0.75,-x+0.25', + '-y+0.5,-z+0.5,x', 'z+0.75,-y+1.25,x+0.75', '-z+1.25,y+1.25,x+0.25'] + ncsym: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25'] + number: 210 + schoenflies: O^4 + universal_h_m: F 41 3 2 + I432: + spacegroup: I432 + crystal_class: cubic + hall: ' I 4 2 3' + hermann_mauguin: I 4 3 2 + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', + '-y+0.5,-x+0.5,-z+0.5', 'z+0.5,x+0.5,y+0.5', '-x+0.5,z+0.5,y+0.5', '-z+0.5,-x+0.5,y+0.5', + 'x+0.5,-z+0.5,y+0.5', 'z+0.5,-x+0.5,-y+0.5', 'x+0.5,z+0.5,-y+0.5', '-z+0.5,x+0.5,-y+0.5', + '-x+0.5,-z+0.5,-y+0.5', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+0.5', 'z+0.5,y+0.5,-x+0.5', + '-y+0.5,z+0.5,-x+0.5', '-z+0.5,-y+0.5,-x+0.5', '-y+0.5,-z+0.5,x+0.5', 'z+0.5,-y+0.5,x+0.5', + '-z+0.5,y+0.5,x+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x'] + number: 211 + schoenflies: O^5 + universal_h_m: I 4 3 2 + P4332: + spacegroup: P4332 + crystal_class: cubic + hall: ' P 4acd 2ab 3' + hermann_mauguin: P 43 3 2 + symops: ['x,y,z', '-y+0.75,x+0.25,z+0.75', '-x+0.5,-y,z+0.5', 'y+0.75,-x+0.75,z+0.25', + 'x+0.5,-y+0.5,-z', 'y+0.25,x+0.75,-z+0.75', '-x,y+0.5,-z+0.5', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.75,z+0.25,y+0.75', '-z+0.5,-x,y+0.5', 'x+0.75,-z+0.75,y+0.25', + 'z+0.5,-x+0.5,-y', 'x+0.25,z+0.75,-y+0.75', '-z,x+0.5,-y+0.5', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.25,y+0.75,-x+0.75', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75'] + ncsym: ['x,y,z', '-y+0.75,x+0.25,z+0.75', '-x+0.5,-y,z+0.5', 'y+0.75,-x+0.75,z+0.25', + 'x+0.5,-y+0.5,-z', 'y+0.25,x+0.75,-z+0.75', '-x,y+0.5,-z+0.5', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.75,z+0.25,y+0.75', '-z+0.5,-x,y+0.5', 'x+0.75,-z+0.75,y+0.25', + 'z+0.5,-x+0.5,-y', 'x+0.25,z+0.75,-y+0.75', '-z,x+0.5,-y+0.5', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.25,y+0.75,-x+0.75', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75'] + number: 212 + schoenflies: O^6 + universal_h_m: P 43 3 2 + P4132: + spacegroup: P4132 + crystal_class: cubic + hall: ' P 4bd 2ab 3' + hermann_mauguin: P 41 3 2 + symops: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x+0.5,-y+0.5,-z', 'y+0.75,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.75,-z+0.75', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z+0.5,-x+0.5,-y', 'x+0.75,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.75,-y+0.75', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.75,-y+0.75,-x+0.75', + '-y+0.5,-z,x+0.5', 'z+0.25,-y+0.25,x+0.75', '-z+0.25,y+0.75,x+0.25'] + ncsym: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x+0.5,-y+0.5,-z', 'y+0.75,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.75,-z+0.75', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z+0.5,-x+0.5,-y', 'x+0.75,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.75,-y+0.75', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.75,-y+0.75,-x+0.75', + '-y+0.5,-z,x+0.5', 'z+0.25,-y+0.25,x+0.75', '-z+0.25,y+0.75,x+0.25'] + number: 213 + schoenflies: O^7 + universal_h_m: P 41 3 2 + I4132: + spacegroup: I4132 + crystal_class: cubic + hall: ' I 4bd 2c 3' + hermann_mauguin: I 41 3 2 + symops: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x,-y,-z+0.5', 'y+0.25,x+0.75,-z+0.75', '-x+0.5,y,-z', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z,-x,-y+0.5', 'x+0.25,z+0.75,-y+0.75', '-z+0.5,x,-y', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75', 'x+0.5,y+0.5,z+0.5', + '-y+0.75,x+1.25,z+0.75', '-x+1,-y+0.5,z+1', 'y+0.75,-x+0.75,z+1.25', 'x+0.5,-y+0.5,-z+1', + 'y+0.75,x+1.25,-z+1.25', '-x+1,y+0.5,-z+0.5', '-y+0.75,-x+0.75,-z+0.75', 'z+0.5,x+0.5,y+0.5', + '-x+0.75,z+1.25,y+0.75', '-z+1,-x+0.5,y+1', 'x+0.75,-z+0.75,y+1.25', 'z+0.5,-x+0.5,-y+1', + 'x+0.75,z+1.25,-y+1.25', '-z+1,x+0.5,-y+0.5', '-x+0.75,-z+0.75,-y+0.75', 'y+0.5,z+0.5,x+0.5', + 'y+1,-z+1,-x+0.5', 'z+1.25,y+0.75,-x+0.75', '-y+0.5,z+1,-x+1', '-z+0.75,-y+0.75,-x+0.75', + '-y+1,-z+0.5,x+1', 'z+1.25,-y+1.25,x+0.75', '-z+1.25,y+0.75,x+1.25'] + ncsym: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x,-y,-z+0.5', 'y+0.25,x+0.75,-z+0.75', '-x+0.5,y,-z', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z,-x,-y+0.5', 'x+0.25,z+0.75,-y+0.75', '-z+0.5,x,-y', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75'] + number: 214 + schoenflies: O^8 + universal_h_m: I 41 3 2 + P-43m: + spacegroup: P-43m + crystal_class: cubic + hall: ' P -4 2 3' + hermann_mauguin: P -4 3 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x'] + number: 215 + schoenflies: Td^1 + universal_h_m: P -4 3 m + F-43m: + spacegroup: F-43m + crystal_class: cubic + hall: ' F -4 2 3' + hermann_mauguin: F -4 3 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x', 'x,y+0.5,z+0.5', 'y,-x+0.5,-z+0.5', '-x,-y+0.5,z+0.5', '-y,x+0.5,-z+0.5', + 'x,-y+0.5,-z+0.5', '-y,-x+0.5,z+0.5', '-x,y+0.5,-z+0.5', 'y,x+0.5,z+0.5', 'z,x+0.5,y+0.5', + 'x,-z+0.5,-y+0.5', '-z,-x+0.5,y+0.5', '-x,z+0.5,-y+0.5', 'z,-x+0.5,-y+0.5', + '-x,-z+0.5,y+0.5', '-z,x+0.5,-y+0.5', 'x,z+0.5,y+0.5', 'y,z+0.5,x+0.5', 'y,-z+0.5,-x+0.5', + '-z,-y+0.5,x+0.5', '-y,z+0.5,-x+0.5', 'z,y+0.5,x+0.5', '-y,-z+0.5,x+0.5', '-z,y+0.5,-x+0.5', + 'z,-y+0.5,-x+0.5', 'x+0.5,y,z+0.5', 'y+0.5,-x,-z+0.5', '-x+0.5,-y,z+0.5', '-y+0.5,x,-z+0.5', + 'x+0.5,-y,-z+0.5', '-y+0.5,-x,z+0.5', '-x+0.5,y,-z+0.5', 'y+0.5,x,z+0.5', 'z+0.5,x,y+0.5', + 'x+0.5,-z,-y+0.5', '-z+0.5,-x,y+0.5', '-x+0.5,z,-y+0.5', 'z+0.5,-x,-y+0.5', + '-x+0.5,-z,y+0.5', '-z+0.5,x,-y+0.5', 'x+0.5,z,y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z,-x+0.5', + '-z+0.5,-y,x+0.5', '-y+0.5,z,-x+0.5', 'z+0.5,y,x+0.5', '-y+0.5,-z,x+0.5', '-z+0.5,y,-x+0.5', + 'z+0.5,-y,-x+0.5', 'x+0.5,y+0.5,z', 'y+0.5,-x+0.5,-z', '-x+0.5,-y+0.5,z', '-y+0.5,x+0.5,-z', + 'x+0.5,-y+0.5,-z', '-y+0.5,-x+0.5,z', '-x+0.5,y+0.5,-z', 'y+0.5,x+0.5,z', 'z+0.5,x+0.5,y', + 'x+0.5,-z+0.5,-y', '-z+0.5,-x+0.5,y', '-x+0.5,z+0.5,-y', 'z+0.5,-x+0.5,-y', + '-x+0.5,-z+0.5,y', '-z+0.5,x+0.5,-y', 'x+0.5,z+0.5,y', 'y+0.5,z+0.5,x', 'y+0.5,-z+0.5,-x', + '-z+0.5,-y+0.5,x', '-y+0.5,z+0.5,-x', 'z+0.5,y+0.5,x', '-y+0.5,-z+0.5,x', '-z+0.5,y+0.5,-x', + 'z+0.5,-y+0.5,-x'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x'] + number: 216 + schoenflies: Td^2 + universal_h_m: F -4 3 m + I-43m: + spacegroup: I-43m + crystal_class: cubic + hall: ' I -4 2 3' + hermann_mauguin: I -4 3 m + symops: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x', 'x+0.5,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', '-x+0.5,-y+0.5,z+0.5', + '-y+0.5,x+0.5,-z+0.5', 'x+0.5,-y+0.5,-z+0.5', '-y+0.5,-x+0.5,z+0.5', '-x+0.5,y+0.5,-z+0.5', + 'y+0.5,x+0.5,z+0.5', 'z+0.5,x+0.5,y+0.5', 'x+0.5,-z+0.5,-y+0.5', '-z+0.5,-x+0.5,y+0.5', + '-x+0.5,z+0.5,-y+0.5', 'z+0.5,-x+0.5,-y+0.5', '-x+0.5,-z+0.5,y+0.5', '-z+0.5,x+0.5,-y+0.5', + 'x+0.5,z+0.5,y+0.5', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+0.5', '-z+0.5,-y+0.5,x+0.5', + '-y+0.5,z+0.5,-x+0.5', 'z+0.5,y+0.5,x+0.5', '-y+0.5,-z+0.5,x+0.5', '-z+0.5,y+0.5,-x+0.5', + 'z+0.5,-y+0.5,-x+0.5'] + ncsym: ['x,y,z', 'y,-x,-z', '-x,-y,z', '-y,x,-z', 'x,-y,-z', '-y,-x,z', '-x,y,-z', + 'y,x,z', 'z,x,y', 'x,-z,-y', '-z,-x,y', '-x,z,-y', 'z,-x,-y', '-x,-z,y', '-z,x,-y', + 'x,z,y', 'y,z,x', 'y,-z,-x', '-z,-y,x', '-y,z,-x', 'z,y,x', '-y,-z,x', '-z,y,-x', + 'z,-y,-x'] + number: 217 + schoenflies: Td^3 + universal_h_m: I -4 3 m + P-43n: + spacegroup: P-43n + crystal_class: cubic + hall: ' P -4n 2 3' + hermann_mauguin: P -4 3 n + symops: ['x,y,z', 'y+0.5,-x+0.5,-z+0.5', '-x,-y,z', '-y+0.5,x+0.5,-z+0.5', 'x,-y,-z', + '-y+0.5,-x+0.5,z+0.5', '-x,y,-z', 'y+0.5,x+0.5,z+0.5', 'z,x,y', 'x+0.5,-z+0.5,-y+0.5', + '-z,-x,y', '-x+0.5,z+0.5,-y+0.5', 'z,-x,-y', '-x+0.5,-z+0.5,y+0.5', '-z,x,-y', + 'x+0.5,z+0.5,y+0.5', 'y,z,x', 'y,-z,-x', '-z+0.5,-y+0.5,x+0.5', '-y,z,-x', 'z+0.5,y+0.5,x+0.5', + '-y,-z,x', '-z+0.5,y+0.5,-x+0.5', 'z+0.5,-y+0.5,-x+0.5'] + ncsym: ['x,y,z', 'y+0.5,-x+0.5,-z+0.5', '-x,-y,z', '-y+0.5,x+0.5,-z+0.5', 'x,-y,-z', + '-y+0.5,-x+0.5,z+0.5', '-x,y,-z', 'y+0.5,x+0.5,z+0.5', 'z,x,y', 'x+0.5,-z+0.5,-y+0.5', + '-z,-x,y', '-x+0.5,z+0.5,-y+0.5', 'z,-x,-y', '-x+0.5,-z+0.5,y+0.5', '-z,x,-y', + 'x+0.5,z+0.5,y+0.5', 'y,z,x', 'y,-z,-x', '-z+0.5,-y+0.5,x+0.5', '-y,z,-x', 'z+0.5,y+0.5,x+0.5', + '-y,-z,x', '-z+0.5,y+0.5,-x+0.5', 'z+0.5,-y+0.5,-x+0.5'] + number: 218 + schoenflies: Td^4 + universal_h_m: P -4 3 n + F-43c: + spacegroup: F-43c + crystal_class: cubic + hall: ' F -4a 2 3' + hermann_mauguin: F -4 3 c + symops: ['x,y,z', 'y+0.5,-x,-z', '-x+0.5,-y+0.5,z', '-y,x+0.5,-z', 'x,-y,-z', + '-y+0.5,-x,z', '-x+0.5,y+0.5,-z', 'y,x+0.5,z', 'z,x,y', 'x+0.5,-z,-y', '-z+0.5,-x+0.5,y', + '-x,z+0.5,-y', 'z,-x,-y', '-x+0.5,-z,y', '-z+0.5,x+0.5,-y', 'x,z+0.5,y', 'y,z,x', + 'y,-z+0.5,-x+0.5', '-z,-y,x+0.5', '-y+0.5,z,-x+0.5', 'z+0.5,y,x', '-y,-z,x', + '-z,y,-x+0.5', 'z+0.5,-y+0.5,-x+0.5', 'x,y+0.5,z+0.5', 'y+0.5,-x+0.5,-z+0.5', + '-x+0.5,-y+1,z+0.5', '-y,x+1,-z+0.5', 'x,-y+0.5,-z+0.5', '-y+0.5,-x+0.5,z+0.5', + '-x+0.5,y+1,-z+0.5', 'y,x+1,z+0.5', 'z,x+0.5,y+0.5', 'x+0.5,-z+0.5,-y+0.5', + '-z+0.5,-x+1,y+0.5', '-x,z+1,-y+0.5', 'z,-x+0.5,-y+0.5', '-x+0.5,-z+0.5,y+0.5', + '-z+0.5,x+1,-y+0.5', 'x,z+1,y+0.5', 'y,z+0.5,x+0.5', 'y,-z+1,-x+1', '-z,-y+0.5,x+1', + '-y+0.5,z+0.5,-x+1', 'z+0.5,y+0.5,x+0.5', '-y,-z+0.5,x+0.5', '-z,y+0.5,-x+1', + 'z+0.5,-y+1,-x+1', 'x+0.5,y,z+0.5', 'y+1,-x,-z+0.5', '-x+1,-y+0.5,z+0.5', '-y+0.5,x+0.5,-z+0.5', + 'x+0.5,-y,-z+0.5', '-y+1,-x,z+0.5', '-x+1,y+0.5,-z+0.5', 'y+0.5,x+0.5,z+0.5', + 'z+0.5,x,y+0.5', 'x+1,-z,-y+0.5', '-z+1,-x+0.5,y+0.5', '-x+0.5,z+0.5,-y+0.5', + 'z+0.5,-x,-y+0.5', '-x+1,-z,y+0.5', '-z+1,x+0.5,-y+0.5', 'x+0.5,z+0.5,y+0.5', + 'y+0.5,z,x+0.5', 'y+0.5,-z+0.5,-x+1', '-z+0.5,-y,x+1', '-y+1,z,-x+1', 'z+1,y,x+0.5', + '-y+0.5,-z,x+0.5', '-z+0.5,y,-x+1', 'z+1,-y+0.5,-x+1', 'x+0.5,y+0.5,z', 'y+1,-x+0.5,-z', + '-x+1,-y+1,z', '-y+0.5,x+1,-z', 'x+0.5,-y+0.5,-z', '-y+1,-x+0.5,z', '-x+1,y+1,-z', + 'y+0.5,x+1,z', 'z+0.5,x+0.5,y', 'x+1,-z+0.5,-y', '-z+1,-x+1,y', '-x+0.5,z+1,-y', + 'z+0.5,-x+0.5,-y', '-x+1,-z+0.5,y', '-z+1,x+1,-y', 'x+0.5,z+1,y', 'y+0.5,z+0.5,x', + 'y+0.5,-z+1,-x+0.5', '-z+0.5,-y+0.5,x+0.5', '-y+1,z+0.5,-x+0.5', 'z+1,y+0.5,x', + '-y+0.5,-z+0.5,x', '-z+0.5,y+0.5,-x+0.5', 'z+1,-y+1,-x+0.5'] + ncsym: ['x,y,z', 'y+0.5,-x,-z', '-x+0.5,-y+0.5,z', '-y,x+0.5,-z', 'x,-y,-z', '-y+0.5,-x,z', + '-x+0.5,y+0.5,-z', 'y,x+0.5,z', 'z,x,y', 'x+0.5,-z,-y', '-z+0.5,-x+0.5,y', '-x,z+0.5,-y', + 'z,-x,-y', '-x+0.5,-z,y', '-z+0.5,x+0.5,-y', 'x,z+0.5,y', 'y,z,x', 'y,-z+0.5,-x+0.5', + '-z,-y,x+0.5', '-y+0.5,z,-x+0.5', 'z+0.5,y,x', '-y,-z,x', '-z,y,-x+0.5', 'z+0.5,-y+0.5,-x+0.5'] + number: 219 + schoenflies: Td^5 + universal_h_m: F -4 3 c + I-43d: + spacegroup: I-43d + crystal_class: cubic + hall: ' I -4bd 2c 3' + hermann_mauguin: I -4 3 d + symops: ['x,y,z', 'y+0.25,-x+0.75,-z+0.25', '-x,-y+0.5,z', '-y+0.75,x+0.75,-z+0.25', + 'x,-y,-z+0.5', '-y+0.25,-x+0.75,z+0.75', '-x,y+0.5,-z+0.5', 'y+0.75,x+0.75,z+0.75', + 'z,x,y', 'x+0.25,-z+0.75,-y+0.25', '-z,-x+0.5,y', '-x+0.75,z+0.75,-y+0.25', + 'z,-x,-y+0.5', '-x+0.25,-z+0.75,y+0.75', '-z,x+0.5,-y+0.5', 'x+0.75,z+0.75,y+0.75', + 'y,z,x', 'y,-z,-x+0.5', '-z+0.25,-y+0.75,x+0.75', '-y,z+0.5,-x+0.5', 'z+0.25,y+0.25,x+0.25', + '-y+0.5,-z,x+0.5', '-z+0.25,y+0.25,-x+0.75', 'z+0.75,-y+0.25,-x+0.75', 'x+0.5,y+0.5,z+0.5', + 'y+0.75,-x+1.25,-z+0.75', '-x+0.5,-y+1,z+0.5', '-y+1.25,x+1.25,-z+0.75', 'x+0.5,-y+0.5,-z+1', + '-y+0.75,-x+1.25,z+1.25', '-x+0.5,y+1,-z+1', 'y+1.25,x+1.25,z+1.25', 'z+0.5,x+0.5,y+0.5', + 'x+0.75,-z+1.25,-y+0.75', '-z+0.5,-x+1,y+0.5', '-x+1.25,z+1.25,-y+0.75', 'z+0.5,-x+0.5,-y+1', + '-x+0.75,-z+1.25,y+1.25', '-z+0.5,x+1,-y+1', 'x+1.25,z+1.25,y+1.25', 'y+0.5,z+0.5,x+0.5', + 'y+0.5,-z+0.5,-x+1', '-z+0.75,-y+1.25,x+1.25', '-y+0.5,z+1,-x+1', 'z+0.75,y+0.75,x+0.75', + '-y+1,-z+0.5,x+1', '-z+0.75,y+0.75,-x+1.25', 'z+1.25,-y+0.75,-x+1.25'] + ncsym: ['x,y,z', 'y+0.25,-x+0.75,-z+0.25', '-x,-y+0.5,z', '-y+0.75,x+0.75,-z+0.25', + 'x,-y,-z+0.5', '-y+0.25,-x+0.75,z+0.75', '-x,y+0.5,-z+0.5', 'y+0.75,x+0.75,z+0.75', + 'z,x,y', 'x+0.25,-z+0.75,-y+0.25', '-z,-x+0.5,y', '-x+0.75,z+0.75,-y+0.25', + 'z,-x,-y+0.5', '-x+0.25,-z+0.75,y+0.75', '-z,x+0.5,-y+0.5', 'x+0.75,z+0.75,y+0.75', + 'y,z,x', 'y,-z,-x+0.5', '-z+0.25,-y+0.75,x+0.75', '-y,z+0.5,-x+0.5', 'z+0.25,y+0.25,x+0.25', + '-y+0.5,-z,x+0.5', '-z+0.25,y+0.25,-x+0.75', 'z+0.75,-y+0.25,-x+0.75'] + number: 220 + schoenflies: Td^6 + universal_h_m: I -4 3 d + Pm-3m: + spacegroup: Pm-3m + crystal_class: cubic + hall: -P 4 2 3 + hermann_mauguin: P m -3 m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x'] + number: 221 + schoenflies: Oh^1 + universal_h_m: P m -3 m + Pn-3n: + spacegroup: Pn-3n + crystal_class: cubic + hall: ' P 4 2 3 -1n' + hermann_mauguin: P n -3 n + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', 'x+0.5,-z+0.5,-y+0.5', 'z+0.5,x+0.5,-y+0.5', + '-x+0.5,z+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', '-x+0.5,-z+0.5,y+0.5', 'z+0.5,-x+0.5,y+0.5', + 'x+0.5,z+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', '-z+0.5,-y+0.5,x+0.5', + 'y+0.5,-z+0.5,x+0.5', 'z+0.5,y+0.5,x+0.5', 'y+0.5,z+0.5,-x+0.5', '-z+0.5,y+0.5,-x+0.5', + 'z+0.5,-y+0.5,-x+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', 'x+0.5,-z+0.5,-y+0.5', 'z+0.5,x+0.5,-y+0.5', + '-x+0.5,z+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', '-x+0.5,-z+0.5,y+0.5', 'z+0.5,-x+0.5,y+0.5', + 'x+0.5,z+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', '-z+0.5,-y+0.5,x+0.5', + 'y+0.5,-z+0.5,x+0.5', 'z+0.5,y+0.5,x+0.5', 'y+0.5,z+0.5,-x+0.5', '-z+0.5,y+0.5,-x+0.5', + 'z+0.5,-y+0.5,-x+0.5'] + number: 222 + schoenflies: Oh^2 + universal_h_m: P n -3 n :1 + Pm-3n: + spacegroup: Pm-3n + crystal_class: cubic + hall: -P 4n 2 3 + hermann_mauguin: P m -3 n + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5', + '-x,-y,-z', 'y-0.5,-x-0.5,-z-0.5', 'x,y,-z', '-y-0.5,x-0.5,-z-0.5', '-x,y,z', + '-y-0.5,-x-0.5,z-0.5', 'x,-y,z', 'y-0.5,x-0.5,z-0.5', '-z,-x,-y', 'x-0.5,-z-0.5,-y-0.5', + 'z,x,-y', '-x-0.5,z-0.5,-y-0.5', '-z,x,y', '-x-0.5,-z-0.5,y-0.5', 'z,-x,y', + 'x-0.5,z-0.5,y-0.5', '-y,-z,-x', '-y,z,x', '-z-0.5,-y-0.5,x-0.5', 'y,-z,x', + 'z-0.5,y-0.5,x-0.5', 'y,z,-x', '-z-0.5,y-0.5,-x-0.5', 'z-0.5,-y-0.5,-x-0.5'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5', + '-x,-y,-z', 'y-0.5,-x-0.5,-z-0.5', 'x,y,-z', '-y-0.5,x-0.5,-z-0.5', '-x,y,z', + '-y-0.5,-x-0.5,z-0.5', 'x,-y,z', 'y-0.5,x-0.5,z-0.5', '-z,-x,-y', 'x-0.5,-z-0.5,-y-0.5', + 'z,x,-y', '-x-0.5,z-0.5,-y-0.5', '-z,x,y', '-x-0.5,-z-0.5,y-0.5', 'z,-x,y', + 'x-0.5,z-0.5,y-0.5', '-y,-z,-x', '-y,z,x', '-z-0.5,-y-0.5,x-0.5', 'y,-z,x', + 'z-0.5,y-0.5,x-0.5', 'y,z,-x', '-z-0.5,y-0.5,-x-0.5', 'z-0.5,-y-0.5,-x-0.5'] + number: 223 + schoenflies: Oh^3 + universal_h_m: P m -3 n + Pn-3m: + spacegroup: Pn-3m + crystal_class: cubic + hall: ' P 4n 2 3 -1n' + hermann_mauguin: P n -3 m + symops: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5', + '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', + '-y,-x,z', 'x+0.5,-y+0.5,z+0.5', 'y,x,z', '-z+0.5,-x+0.5,-y+0.5', 'x,-z,-y', + 'z+0.5,x+0.5,-y+0.5', '-x,z,-y', '-z+0.5,x+0.5,y+0.5', '-x,-z,y', 'z+0.5,-x+0.5,y+0.5', + 'x,z,y', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', '-z,-y,x', 'y+0.5,-z+0.5,x+0.5', + 'z,y,x', 'y+0.5,z+0.5,-x+0.5', '-z,y,-x', 'z,-y,-x'] + ncsym: ['x,y,z', '-y+0.5,x+0.5,z+0.5', '-x,-y,z', 'y+0.5,-x+0.5,z+0.5', 'x,-y,-z', + 'y+0.5,x+0.5,-z+0.5', '-x,y,-z', '-y+0.5,-x+0.5,-z+0.5', 'z,x,y', '-x+0.5,z+0.5,y+0.5', + '-z,-x,y', 'x+0.5,-z+0.5,y+0.5', 'z,-x,-y', 'x+0.5,z+0.5,-y+0.5', '-z,x,-y', + '-x+0.5,-z+0.5,-y+0.5', 'y,z,x', 'y,-z,-x', 'z+0.5,y+0.5,-x+0.5', '-y,z,-x', + '-z+0.5,-y+0.5,-x+0.5', '-y,-z,x', 'z+0.5,-y+0.5,x+0.5', '-z+0.5,y+0.5,x+0.5', + '-x+0.5,-y+0.5,-z+0.5', 'y,-x,-z', 'x+0.5,y+0.5,-z+0.5', '-y,x,-z', '-x+0.5,y+0.5,z+0.5', + '-y,-x,z', 'x+0.5,-y+0.5,z+0.5', 'y,x,z', '-z+0.5,-x+0.5,-y+0.5', 'x,-z,-y', + 'z+0.5,x+0.5,-y+0.5', '-x,z,-y', '-z+0.5,x+0.5,y+0.5', '-x,-z,y', 'z+0.5,-x+0.5,y+0.5', + 'x,z,y', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', '-z,-y,x', 'y+0.5,-z+0.5,x+0.5', + 'z,y,x', 'y+0.5,z+0.5,-x+0.5', '-z,y,-x', 'z,-y,-x'] + number: 224 + schoenflies: Oh^4 + universal_h_m: P n -3 m :1 + Fm-3m: + spacegroup: Fm-3m + crystal_class: cubic + hall: -F 4 2 3 + hermann_mauguin: F m -3 m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x', 'x,y+0.5,z+0.5', '-y,x+0.5,z+0.5', '-x,-y+0.5,z+0.5', + 'y,-x+0.5,z+0.5', 'x,-y+0.5,-z+0.5', 'y,x+0.5,-z+0.5', '-x,y+0.5,-z+0.5', '-y,-x+0.5,-z+0.5', + 'z,x+0.5,y+0.5', '-x,z+0.5,y+0.5', '-z,-x+0.5,y+0.5', 'x,-z+0.5,y+0.5', 'z,-x+0.5,-y+0.5', + 'x,z+0.5,-y+0.5', '-z,x+0.5,-y+0.5', '-x,-z+0.5,-y+0.5', 'y,z+0.5,x+0.5', 'y,-z+0.5,-x+0.5', + 'z,y+0.5,-x+0.5', '-y,z+0.5,-x+0.5', '-z,-y+0.5,-x+0.5', '-y,-z+0.5,x+0.5', + 'z,-y+0.5,x+0.5', '-z,y+0.5,x+0.5', '-x,-y+0.5,-z+0.5', 'y,-x+0.5,-z+0.5', 'x,y+0.5,-z+0.5', + '-y,x+0.5,-z+0.5', '-x,y+0.5,z+0.5', '-y,-x+0.5,z+0.5', 'x,-y+0.5,z+0.5', 'y,x+0.5,z+0.5', + '-z,-x+0.5,-y+0.5', 'x,-z+0.5,-y+0.5', 'z,x+0.5,-y+0.5', '-x,z+0.5,-y+0.5', + '-z,x+0.5,y+0.5', '-x,-z+0.5,y+0.5', 'z,-x+0.5,y+0.5', 'x,z+0.5,y+0.5', '-y,-z+0.5,-x+0.5', + '-y,z+0.5,x+0.5', '-z,-y+0.5,x+0.5', 'y,-z+0.5,x+0.5', 'z,y+0.5,x+0.5', 'y,z+0.5,-x+0.5', + '-z,y+0.5,-x+0.5', 'z,-y+0.5,-x+0.5', 'x+0.5,y,z+0.5', '-y+0.5,x,z+0.5', '-x+0.5,-y,z+0.5', + 'y+0.5,-x,z+0.5', 'x+0.5,-y,-z+0.5', 'y+0.5,x,-z+0.5', '-x+0.5,y,-z+0.5', '-y+0.5,-x,-z+0.5', + 'z+0.5,x,y+0.5', '-x+0.5,z,y+0.5', '-z+0.5,-x,y+0.5', 'x+0.5,-z,y+0.5', 'z+0.5,-x,-y+0.5', + 'x+0.5,z,-y+0.5', '-z+0.5,x,-y+0.5', '-x+0.5,-z,-y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z,-x+0.5', + 'z+0.5,y,-x+0.5', '-y+0.5,z,-x+0.5', '-z+0.5,-y,-x+0.5', '-y+0.5,-z,x+0.5', + 'z+0.5,-y,x+0.5', '-z+0.5,y,x+0.5', '-x+0.5,-y,-z+0.5', 'y+0.5,-x,-z+0.5', 'x+0.5,y,-z+0.5', + '-y+0.5,x,-z+0.5', '-x+0.5,y,z+0.5', '-y+0.5,-x,z+0.5', 'x+0.5,-y,z+0.5', 'y+0.5,x,z+0.5', + '-z+0.5,-x,-y+0.5', 'x+0.5,-z,-y+0.5', 'z+0.5,x,-y+0.5', '-x+0.5,z,-y+0.5', + '-z+0.5,x,y+0.5', '-x+0.5,-z,y+0.5', 'z+0.5,-x,y+0.5', 'x+0.5,z,y+0.5', '-y+0.5,-z,-x+0.5', + '-y+0.5,z,x+0.5', '-z+0.5,-y,x+0.5', 'y+0.5,-z,x+0.5', 'z+0.5,y,x+0.5', 'y+0.5,z,-x+0.5', + '-z+0.5,y,-x+0.5', 'z+0.5,-y,-x+0.5', 'x+0.5,y+0.5,z', '-y+0.5,x+0.5,z', '-x+0.5,-y+0.5,z', + 'y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,-z', 'y+0.5,x+0.5,-z', '-x+0.5,y+0.5,-z', '-y+0.5,-x+0.5,-z', + 'z+0.5,x+0.5,y', '-x+0.5,z+0.5,y', '-z+0.5,-x+0.5,y', 'x+0.5,-z+0.5,y', 'z+0.5,-x+0.5,-y', + 'x+0.5,z+0.5,-y', '-z+0.5,x+0.5,-y', '-x+0.5,-z+0.5,-y', 'y+0.5,z+0.5,x', 'y+0.5,-z+0.5,-x', + 'z+0.5,y+0.5,-x', '-y+0.5,z+0.5,-x', '-z+0.5,-y+0.5,-x', '-y+0.5,-z+0.5,x', + 'z+0.5,-y+0.5,x', '-z+0.5,y+0.5,x', '-x+0.5,-y+0.5,-z', 'y+0.5,-x+0.5,-z', 'x+0.5,y+0.5,-z', + '-y+0.5,x+0.5,-z', '-x+0.5,y+0.5,z', '-y+0.5,-x+0.5,z', 'x+0.5,-y+0.5,z', 'y+0.5,x+0.5,z', + '-z+0.5,-x+0.5,-y', 'x+0.5,-z+0.5,-y', 'z+0.5,x+0.5,-y', '-x+0.5,z+0.5,-y', + '-z+0.5,x+0.5,y', '-x+0.5,-z+0.5,y', 'z+0.5,-x+0.5,y', 'x+0.5,z+0.5,y', '-y+0.5,-z+0.5,-x', + '-y+0.5,z+0.5,x', '-z+0.5,-y+0.5,x', 'y+0.5,-z+0.5,x', 'z+0.5,y+0.5,x', 'y+0.5,z+0.5,-x', + '-z+0.5,y+0.5,-x', 'z+0.5,-y+0.5,-x'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x'] + number: 225 + schoenflies: Oh^5 + universal_h_m: F m -3 m + Fm-3c: + spacegroup: Fm-3c + crystal_class: cubic + hall: -F 4a 2 3 + hermann_mauguin: F m -3 c + symops: ['x,y,z', '-y+0.5,x,z', '-x+0.5,-y+0.5,z', 'y,-x+0.5,z', 'x,-y,-z', 'y+0.5,x,-z', + '-x+0.5,y+0.5,-z', '-y,-x+0.5,-z', 'z,x,y', '-x+0.5,z,y', '-z+0.5,-x+0.5,y', + 'x,-z+0.5,y', 'z,-x,-y', 'x+0.5,z,-y', '-z+0.5,x+0.5,-y', '-x,-z+0.5,-y', 'y,z,x', + 'y,-z+0.5,-x+0.5', 'z,y,-x+0.5', '-y+0.5,z,-x+0.5', '-z+0.5,-y,-x', '-y,-z,x', + 'z,-y,x+0.5', '-z+0.5,y+0.5,x+0.5', '-x,-y,-z', 'y-0.5,-x,-z', 'x-0.5,y-0.5,-z', + '-y,x-0.5,-z', '-x,y,z', '-y-0.5,-x,z', 'x-0.5,-y-0.5,z', 'y,x-0.5,z', '-z,-x,-y', + 'x-0.5,-z,-y', 'z-0.5,x-0.5,-y', '-x,z-0.5,-y', '-z,x,y', '-x-0.5,-z,y', 'z-0.5,-x-0.5,y', + 'x,z-0.5,y', '-y,-z,-x', '-y,z-0.5,x-0.5', '-z,-y,x-0.5', 'y-0.5,-z,x-0.5', + 'z-0.5,y,x', 'y,z,-x', '-z,y,-x-0.5', 'z-0.5,-y-0.5,-x-0.5', 'x,y+0.5,z+0.5', + '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+1,z+0.5', 'y,-x+1,z+0.5', 'x,-y+0.5,-z+0.5', + 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y+1,-z+0.5', '-y,-x+1,-z+0.5', 'z,x+0.5,y+0.5', + '-x+0.5,z+0.5,y+0.5', '-z+0.5,-x+1,y+0.5', 'x,-z+1,y+0.5', 'z,-x+0.5,-y+0.5', + 'x+0.5,z+0.5,-y+0.5', '-z+0.5,x+1,-y+0.5', '-x,-z+1,-y+0.5', 'y,z+0.5,x+0.5', + 'y,-z+1,-x+1', 'z,y+0.5,-x+1', '-y+0.5,z+0.5,-x+1', '-z+0.5,-y+0.5,-x+0.5', + '-y,-z+0.5,x+0.5', 'z,-y+0.5,x+1', '-z+0.5,y+1,x+1', '-x,-y+0.5,-z+0.5', 'y-0.5,-x+0.5,-z+0.5', + 'x-0.5,y,-z+0.5', '-y,x,-z+0.5', '-x,y+0.5,z+0.5', '-y-0.5,-x+0.5,z+0.5', 'x-0.5,-y,z+0.5', + 'y,x,z+0.5', '-z,-x+0.5,-y+0.5', 'x-0.5,-z+0.5,-y+0.5', 'z-0.5,x,-y+0.5', '-x,z,-y+0.5', + '-z,x+0.5,y+0.5', '-x-0.5,-z+0.5,y+0.5', 'z-0.5,-x,y+0.5', 'x,z,y+0.5', '-y,-z+0.5,-x+0.5', + '-y,z,x', '-z,-y+0.5,x', 'y-0.5,-z+0.5,x', 'z-0.5,y+0.5,x+0.5', 'y,z+0.5,-x+0.5', + '-z,y+0.5,-x', 'z-0.5,-y,-x', 'x+0.5,y,z+0.5', '-y+1,x,z+0.5', '-x+1,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y,-z+0.5', 'y+1,x,-z+0.5', '-x+1,y+0.5,-z+0.5', + '-y+0.5,-x+0.5,-z+0.5', 'z+0.5,x,y+0.5', '-x+1,z,y+0.5', '-z+1,-x+0.5,y+0.5', + 'x+0.5,-z+0.5,y+0.5', 'z+0.5,-x,-y+0.5', 'x+1,z,-y+0.5', '-z+1,x+0.5,-y+0.5', + '-x+0.5,-z+0.5,-y+0.5', 'y+0.5,z,x+0.5', 'y+0.5,-z+0.5,-x+1', 'z+0.5,y,-x+1', + '-y+1,z,-x+1', '-z+1,-y,-x+0.5', '-y+0.5,-z,x+0.5', 'z+0.5,-y,x+1', '-z+1,y+0.5,x+1', + '-x+0.5,-y,-z+0.5', 'y,-x,-z+0.5', 'x,y-0.5,-z+0.5', '-y+0.5,x-0.5,-z+0.5', + '-x+0.5,y,z+0.5', '-y,-x,z+0.5', 'x,-y-0.5,z+0.5', 'y+0.5,x-0.5,z+0.5', '-z+0.5,-x,-y+0.5', + 'x,-z,-y+0.5', 'z,x-0.5,-y+0.5', '-x+0.5,z-0.5,-y+0.5', '-z+0.5,x,y+0.5', '-x,-z,y+0.5', + 'z,-x-0.5,y+0.5', 'x+0.5,z-0.5,y+0.5', '-y+0.5,-z,-x+0.5', '-y+0.5,z-0.5,x', + '-z+0.5,-y,x', 'y,-z,x', 'z,y,x+0.5', 'y+0.5,z,-x+0.5', '-z+0.5,y,-x', 'z,-y-0.5,-x', + 'x+0.5,y+0.5,z', '-y+1,x+0.5,z', '-x+1,-y+1,z', 'y+0.5,-x+1,z', 'x+0.5,-y+0.5,-z', + 'y+1,x+0.5,-z', '-x+1,y+1,-z', '-y+0.5,-x+1,-z', 'z+0.5,x+0.5,y', '-x+1,z+0.5,y', + '-z+1,-x+1,y', 'x+0.5,-z+1,y', 'z+0.5,-x+0.5,-y', 'x+1,z+0.5,-y', '-z+1,x+1,-y', + '-x+0.5,-z+1,-y', 'y+0.5,z+0.5,x', 'y+0.5,-z+1,-x+0.5', 'z+0.5,y+0.5,-x+0.5', + '-y+1,z+0.5,-x+0.5', '-z+1,-y+0.5,-x', '-y+0.5,-z+0.5,x', 'z+0.5,-y+0.5,x+0.5', + '-z+1,y+1,x+0.5', '-x+0.5,-y+0.5,-z', 'y,-x+0.5,-z', 'x,y,-z', '-y+0.5,x,-z', + '-x+0.5,y+0.5,z', '-y,-x+0.5,z', 'x,-y,z', 'y+0.5,x,z', '-z+0.5,-x+0.5,-y', + 'x,-z+0.5,-y', 'z,x,-y', '-x+0.5,z,-y', '-z+0.5,x+0.5,y', '-x,-z+0.5,y', 'z,-x,y', + 'x+0.5,z,y', '-y+0.5,-z+0.5,-x', '-y+0.5,z,x-0.5', '-z+0.5,-y+0.5,x-0.5', 'y,-z+0.5,x-0.5', + 'z,y+0.5,x', 'y+0.5,z+0.5,-x', '-z+0.5,y+0.5,-x-0.5', 'z,-y,-x-0.5'] + ncsym: ['x,y,z', '-y+0.5,x,z', '-x+0.5,-y+0.5,z', 'y,-x+0.5,z', 'x,-y,-z', 'y+0.5,x,-z', + '-x+0.5,y+0.5,-z', '-y,-x+0.5,-z', 'z,x,y', '-x+0.5,z,y', '-z+0.5,-x+0.5,y', + 'x,-z+0.5,y', 'z,-x,-y', 'x+0.5,z,-y', '-z+0.5,x+0.5,-y', '-x,-z+0.5,-y', 'y,z,x', + 'y,-z+0.5,-x+0.5', 'z,y,-x+0.5', '-y+0.5,z,-x+0.5', '-z+0.5,-y,-x', '-y,-z,x', + 'z,-y,x+0.5', '-z+0.5,y+0.5,x+0.5', '-x,-y,-z', 'y-0.5,-x,-z', 'x-0.5,y-0.5,-z', + '-y,x-0.5,-z', '-x,y,z', '-y-0.5,-x,z', 'x-0.5,-y-0.5,z', 'y,x-0.5,z', '-z,-x,-y', + 'x-0.5,-z,-y', 'z-0.5,x-0.5,-y', '-x,z-0.5,-y', '-z,x,y', '-x-0.5,-z,y', 'z-0.5,-x-0.5,y', + 'x,z-0.5,y', '-y,-z,-x', '-y,z-0.5,x-0.5', '-z,-y,x-0.5', 'y-0.5,-z,x-0.5', + 'z-0.5,y,x', 'y,z,-x', '-z,y,-x-0.5', 'z-0.5,-y-0.5,-x-0.5'] + number: 226 + schoenflies: Oh^6 + universal_h_m: F m -3 c + Fd-3m: + spacegroup: Fd-3m + crystal_class: cubic + hall: ' F 4d 2 3 -1d' + hermann_mauguin: F d -3 m + symops: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25', '-x+0.25,-y+0.25,-z+0.25', + 'y,-x,-z', 'x+0.25,y-0.25,-z-0.25', '-y-0.5,x,-z-0.5', '-x+0.25,y+0.25,z+0.25', + '-y,-x,z', 'x+0.25,-y-0.25,z-0.25', 'y-0.5,x,z-0.5', '-z+0.25,-x+0.25,-y+0.25', + 'x,-z,-y', 'z+0.25,x-0.25,-y-0.25', '-x-0.5,z,-y-0.5', '-z+0.25,x+0.25,y+0.25', + '-x,-z,y', 'z+0.25,-x-0.25,y-0.25', 'x-0.5,z,y-0.5', '-y+0.25,-z+0.25,-x+0.25', + '-y-0.25,z+0.25,x-0.25', '-z,-y-0.5,x-0.5', 'y-0.25,-z-0.25,x+0.25', 'z,y,x', + 'y+0.25,z+0.25,-x+0.25', '-z,y-0.5,-x-0.5', 'z-0.5,-y-0.5,-x', 'x,y+0.5,z+0.5', + '-y+0.25,x+0.75,z+0.75', '-x,-y+1,z+1', 'y+0.75,-x+0.75,z+1.25', 'x,-y+0.5,-z+0.5', + 'y+0.25,x+0.75,-z+0.75', '-x,y+1,-z+1', '-y+0.75,-x+0.75,-z+1.25', 'z,x+0.5,y+0.5', + '-x+0.25,z+0.75,y+0.75', '-z,-x+1,y+1', 'x+0.75,-z+0.75,y+1.25', 'z,-x+0.5,-y+0.5', + 'x+0.25,z+0.75,-y+0.75', '-z,x+1,-y+1', '-x+0.75,-z+0.75,-y+1.25', 'y,z+0.5,x+0.5', + 'y+0.5,-z+0.5,-x+1', 'z+0.25,y+1.25,-x+1.25', '-y+0.5,z+1,-x+0.5', '-z+0.25,-y+0.75,-x+0.75', + '-y,-z+0.5,x+0.5', 'z+0.25,-y+1.25,x+1.25', '-z+0.75,y+1.25,x+0.75', '-x+0.25,-y+0.75,-z+0.75', + 'y,-x+0.5,-z+0.5', 'x+0.25,y+0.25,-z+0.25', '-y-0.5,x+0.5,-z', '-x+0.25,y+0.75,z+0.75', + '-y,-x+0.5,z+0.5', 'x+0.25,-y+0.25,z+0.25', 'y-0.5,x+0.5,z', '-z+0.25,-x+0.75,-y+0.75', + 'x,-z+0.5,-y+0.5', 'z+0.25,x+0.25,-y+0.25', '-x-0.5,z+0.5,-y', '-z+0.25,x+0.75,y+0.75', + '-x,-z+0.5,y+0.5', 'z+0.25,-x+0.25,y+0.25', 'x-0.5,z+0.5,y', '-y+0.25,-z+0.75,-x+0.75', + '-y-0.25,z+0.75,x+0.25', '-z,-y,x', 'y-0.25,-z+0.25,x+0.75', 'z,y+0.5,x+0.5', + 'y+0.25,z+0.75,-x+0.75', '-z,y,-x', 'z-0.5,-y,-x+0.5', 'x+0.5,y,z+0.5', '-y+0.75,x+0.25,z+0.75', + '-x+0.5,-y+0.5,z+1', 'y+1.25,-x+0.25,z+1.25', 'x+0.5,-y,-z+0.5', 'y+0.75,x+0.25,-z+0.75', + '-x+0.5,y+0.5,-z+1', '-y+1.25,-x+0.25,-z+1.25', 'z+0.5,x,y+0.5', '-x+0.75,z+0.25,y+0.75', + '-z+0.5,-x+0.5,y+1', 'x+1.25,-z+0.25,y+1.25', 'z+0.5,-x,-y+0.5', 'x+0.75,z+0.25,-y+0.75', + '-z+0.5,x+0.5,-y+1', '-x+1.25,-z+0.25,-y+1.25', 'y+0.5,z,x+0.5', 'y+1,-z,-x+1', + 'z+0.75,y+0.75,-x+1.25', '-y+1,z+0.5,-x+0.5', '-z+0.75,-y+0.25,-x+0.75', '-y+0.5,-z,x+0.5', + 'z+0.75,-y+0.75,x+1.25', '-z+1.25,y+0.75,x+0.75', '-x+0.75,-y+0.25,-z+0.75', + 'y+0.5,-x,-z+0.5', 'x+0.75,y-0.25,-z+0.25', '-y,x,-z', '-x+0.75,y+0.25,z+0.75', + '-y+0.5,-x,z+0.5', 'x+0.75,-y-0.25,z+0.25', 'y,x,z', '-z+0.75,-x+0.25,-y+0.75', + 'x+0.5,-z,-y+0.5', 'z+0.75,x-0.25,-y+0.25', '-x,z,-y', '-z+0.75,x+0.25,y+0.75', + '-x+0.5,-z,y+0.5', 'z+0.75,-x-0.25,y+0.25', 'x,z,y', '-y+0.75,-z+0.25,-x+0.75', + '-y+0.25,z+0.25,x+0.25', '-z+0.5,-y-0.5,x', 'y+0.25,-z-0.25,x+0.75', 'z+0.5,y,x+0.5', + 'y+0.75,z+0.25,-x+0.75', '-z+0.5,y-0.5,-x', 'z,-y-0.5,-x+0.5', 'x+0.5,y+0.5,z', + '-y+0.75,x+0.75,z+0.25', '-x+0.5,-y+1,z+0.5', 'y+1.25,-x+0.75,z+0.75', 'x+0.5,-y+0.5,-z', + 'y+0.75,x+0.75,-z+0.25', '-x+0.5,y+1,-z+0.5', '-y+1.25,-x+0.75,-z+0.75', 'z+0.5,x+0.5,y', + '-x+0.75,z+0.75,y+0.25', '-z+0.5,-x+1,y+0.5', 'x+1.25,-z+0.75,y+0.75', 'z+0.5,-x+0.5,-y', + 'x+0.75,z+0.75,-y+0.25', '-z+0.5,x+1,-y+0.5', '-x+1.25,-z+0.75,-y+0.75', 'y+0.5,z+0.5,x', + 'y+1,-z+0.5,-x+0.5', 'z+0.75,y+1.25,-x+0.75', '-y+1,z+1,-x', '-z+0.75,-y+0.75,-x+0.25', + '-y+0.5,-z+0.5,x', 'z+0.75,-y+1.25,x+0.75', '-z+1.25,y+1.25,x+0.25', '-x+0.75,-y+0.75,-z+0.25', + 'y+0.5,-x+0.5,-z', 'x+0.75,y+0.25,-z-0.25', '-y,x+0.5,-z-0.5', '-x+0.75,y+0.75,z+0.25', + '-y+0.5,-x+0.5,z', 'x+0.75,-y+0.25,z-0.25', 'y,x+0.5,z-0.5', '-z+0.75,-x+0.75,-y+0.25', + 'x+0.5,-z+0.5,-y', 'z+0.75,x+0.25,-y-0.25', '-x,z+0.5,-y-0.5', '-z+0.75,x+0.75,y+0.25', + '-x+0.5,-z+0.5,y', 'z+0.75,-x+0.25,y-0.25', 'x,z+0.5,y-0.5', '-y+0.75,-z+0.75,-x+0.25', + '-y+0.25,z+0.75,x-0.25', '-z+0.5,-y,x-0.5', 'y+0.25,-z+0.25,x+0.25', 'z+0.5,y+0.5,x', + 'y+0.75,z+0.75,-x+0.25', '-z+0.5,y,-x-0.5', 'z,-y,-x'] + ncsym: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25', '-x+0.25,-y+0.25,-z+0.25', + 'y,-x,-z', 'x+0.25,y-0.25,-z-0.25', '-y-0.5,x,-z-0.5', '-x+0.25,y+0.25,z+0.25', + '-y,-x,z', 'x+0.25,-y-0.25,z-0.25', 'y-0.5,x,z-0.5', '-z+0.25,-x+0.25,-y+0.25', + 'x,-z,-y', 'z+0.25,x-0.25,-y-0.25', '-x-0.5,z,-y-0.5', '-z+0.25,x+0.25,y+0.25', + '-x,-z,y', 'z+0.25,-x-0.25,y-0.25', 'x-0.5,z,y-0.5', '-y+0.25,-z+0.25,-x+0.25', + '-y-0.25,z+0.25,x-0.25', '-z,-y-0.5,x-0.5', 'y-0.25,-z-0.25,x+0.25', 'z,y,x', + 'y+0.25,z+0.25,-x+0.25', '-z,y-0.5,-x-0.5', 'z-0.5,-y-0.5,-x'] + number: 227 + schoenflies: Oh^7 + universal_h_m: F d -3 m :1 + Fd-3c: + spacegroup: Fd-3c + crystal_class: cubic + hall: ' F 4d 2 3 -1ad' + hermann_mauguin: F d -3 c + symops: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25', '-x+0.75,-y+0.25,-z+0.25', + 'y+0.5,-x,-z', 'x+0.75,y-0.25,-z-0.25', '-y,x,-z-0.5', '-x+0.75,y+0.25,z+0.25', + '-y+0.5,-x,z', 'x+0.75,-y-0.25,z-0.25', 'y,x,z-0.5', '-z+0.75,-x+0.25,-y+0.25', + 'x+0.5,-z,-y', 'z+0.75,x-0.25,-y-0.25', '-x,z,-y-0.5', '-z+0.75,x+0.25,y+0.25', + '-x+0.5,-z,y', 'z+0.75,-x-0.25,y-0.25', 'x,z,y-0.5', '-y+0.75,-z+0.25,-x+0.25', + '-y+0.25,z+0.25,x-0.25', '-z+0.5,-y-0.5,x-0.5', 'y+0.25,-z-0.25,x+0.25', 'z+0.5,y,x', + 'y+0.75,z+0.25,-x+0.25', '-z+0.5,y-0.5,-x-0.5', 'z,-y-0.5,-x', 'x,y+0.5,z+0.5', + '-y+0.25,x+0.75,z+0.75', '-x,-y+1,z+1', 'y+0.75,-x+0.75,z+1.25', 'x,-y+0.5,-z+0.5', + 'y+0.25,x+0.75,-z+0.75', '-x,y+1,-z+1', '-y+0.75,-x+0.75,-z+1.25', 'z,x+0.5,y+0.5', + '-x+0.25,z+0.75,y+0.75', '-z,-x+1,y+1', 'x+0.75,-z+0.75,y+1.25', 'z,-x+0.5,-y+0.5', + 'x+0.25,z+0.75,-y+0.75', '-z,x+1,-y+1', '-x+0.75,-z+0.75,-y+1.25', 'y,z+0.5,x+0.5', + 'y+0.5,-z+0.5,-x+1', 'z+0.25,y+1.25,-x+1.25', '-y+0.5,z+1,-x+0.5', '-z+0.25,-y+0.75,-x+0.75', + '-y,-z+0.5,x+0.5', 'z+0.25,-y+1.25,x+1.25', '-z+0.75,y+1.25,x+0.75', '-x+0.75,-y+0.75,-z+0.75', + 'y+0.5,-x+0.5,-z+0.5', 'x+0.75,y+0.25,-z+0.25', '-y,x+0.5,-z', '-x+0.75,y+0.75,z+0.75', + '-y+0.5,-x+0.5,z+0.5', 'x+0.75,-y+0.25,z+0.25', 'y,x+0.5,z', '-z+0.75,-x+0.75,-y+0.75', + 'x+0.5,-z+0.5,-y+0.5', 'z+0.75,x+0.25,-y+0.25', '-x,z+0.5,-y', '-z+0.75,x+0.75,y+0.75', + '-x+0.5,-z+0.5,y+0.5', 'z+0.75,-x+0.25,y+0.25', 'x,z+0.5,y', '-y+0.75,-z+0.75,-x+0.75', + '-y+0.25,z+0.75,x+0.25', '-z+0.5,-y,x', 'y+0.25,-z+0.25,x+0.75', 'z+0.5,y+0.5,x+0.5', + 'y+0.75,z+0.75,-x+0.75', '-z+0.5,y,-x', 'z,-y,-x+0.5', 'x+0.5,y,z+0.5', '-y+0.75,x+0.25,z+0.75', + '-x+0.5,-y+0.5,z+1', 'y+1.25,-x+0.25,z+1.25', 'x+0.5,-y,-z+0.5', 'y+0.75,x+0.25,-z+0.75', + '-x+0.5,y+0.5,-z+1', '-y+1.25,-x+0.25,-z+1.25', 'z+0.5,x,y+0.5', '-x+0.75,z+0.25,y+0.75', + '-z+0.5,-x+0.5,y+1', 'x+1.25,-z+0.25,y+1.25', 'z+0.5,-x,-y+0.5', 'x+0.75,z+0.25,-y+0.75', + '-z+0.5,x+0.5,-y+1', '-x+1.25,-z+0.25,-y+1.25', 'y+0.5,z,x+0.5', 'y+1,-z,-x+1', + 'z+0.75,y+0.75,-x+1.25', '-y+1,z+0.5,-x+0.5', '-z+0.75,-y+0.25,-x+0.75', '-y+0.5,-z,x+0.5', + 'z+0.75,-y+0.75,x+1.25', '-z+1.25,y+0.75,x+0.75', '-x+1.25,-y+0.25,-z+0.75', + 'y+1,-x,-z+0.5', 'x+1.25,y-0.25,-z+0.25', '-y+0.5,x,-z', '-x+1.25,y+0.25,z+0.75', + '-y+1,-x,z+0.5', 'x+1.25,-y-0.25,z+0.25', 'y+0.5,x,z', '-z+1.25,-x+0.25,-y+0.75', + 'x+1,-z,-y+0.5', 'z+1.25,x-0.25,-y+0.25', '-x+0.5,z,-y', '-z+1.25,x+0.25,y+0.75', + '-x+1,-z,y+0.5', 'z+1.25,-x-0.25,y+0.25', 'x+0.5,z,y', '-y+1.25,-z+0.25,-x+0.75', + '-y+0.75,z+0.25,x+0.25', '-z+1,-y-0.5,x', 'y+0.75,-z-0.25,x+0.75', 'z+1,y,x+0.5', + 'y+1.25,z+0.25,-x+0.75', '-z+1,y-0.5,-x', 'z+0.5,-y-0.5,-x+0.5', 'x+0.5,y+0.5,z', + '-y+0.75,x+0.75,z+0.25', '-x+0.5,-y+1,z+0.5', 'y+1.25,-x+0.75,z+0.75', 'x+0.5,-y+0.5,-z', + 'y+0.75,x+0.75,-z+0.25', '-x+0.5,y+1,-z+0.5', '-y+1.25,-x+0.75,-z+0.75', 'z+0.5,x+0.5,y', + '-x+0.75,z+0.75,y+0.25', '-z+0.5,-x+1,y+0.5', 'x+1.25,-z+0.75,y+0.75', 'z+0.5,-x+0.5,-y', + 'x+0.75,z+0.75,-y+0.25', '-z+0.5,x+1,-y+0.5', '-x+1.25,-z+0.75,-y+0.75', 'y+0.5,z+0.5,x', + 'y+1,-z+0.5,-x+0.5', 'z+0.75,y+1.25,-x+0.75', '-y+1,z+1,-x', '-z+0.75,-y+0.75,-x+0.25', + '-y+0.5,-z+0.5,x', 'z+0.75,-y+1.25,x+0.75', '-z+1.25,y+1.25,x+0.25', '-x+1.25,-y+0.75,-z+0.25', + 'y+1,-x+0.5,-z', 'x+1.25,y+0.25,-z-0.25', '-y+0.5,x+0.5,-z-0.5', '-x+1.25,y+0.75,z+0.25', + '-y+1,-x+0.5,z', 'x+1.25,-y+0.25,z-0.25', 'y+0.5,x+0.5,z-0.5', '-z+1.25,-x+0.75,-y+0.25', + 'x+1,-z+0.5,-y', 'z+1.25,x+0.25,-y-0.25', '-x+0.5,z+0.5,-y-0.5', '-z+1.25,x+0.75,y+0.25', + '-x+1,-z+0.5,y', 'z+1.25,-x+0.25,y-0.25', 'x+0.5,z+0.5,y-0.5', '-y+1.25,-z+0.75,-x+0.25', + '-y+0.75,z+0.75,x-0.25', '-z+1,-y,x-0.5', 'y+0.75,-z+0.25,x+0.25', 'z+1,y+0.5,x', + 'y+1.25,z+0.75,-x+0.25', '-z+1,y,-x-0.5', 'z+0.5,-y,-x'] + ncsym: ['x,y,z', '-y+0.25,x+0.25,z+0.25', '-x,-y+0.5,z+0.5', 'y+0.75,-x+0.25,z+0.75', + 'x,-y,-z', 'y+0.25,x+0.25,-z+0.25', '-x,y+0.5,-z+0.5', '-y+0.75,-x+0.25,-z+0.75', + 'z,x,y', '-x+0.25,z+0.25,y+0.25', '-z,-x+0.5,y+0.5', 'x+0.75,-z+0.25,y+0.75', + 'z,-x,-y', 'x+0.25,z+0.25,-y+0.25', '-z,x+0.5,-y+0.5', '-x+0.75,-z+0.25,-y+0.75', + 'y,z,x', 'y+0.5,-z,-x+0.5', 'z+0.25,y+0.75,-x+0.75', '-y+0.5,z+0.5,-x', '-z+0.25,-y+0.25,-x+0.25', + '-y,-z,x', 'z+0.25,-y+0.75,x+0.75', '-z+0.75,y+0.75,x+0.25', '-x+0.75,-y+0.25,-z+0.25', + 'y+0.5,-x,-z', 'x+0.75,y-0.25,-z-0.25', '-y,x,-z-0.5', '-x+0.75,y+0.25,z+0.25', + '-y+0.5,-x,z', 'x+0.75,-y-0.25,z-0.25', 'y,x,z-0.5', '-z+0.75,-x+0.25,-y+0.25', + 'x+0.5,-z,-y', 'z+0.75,x-0.25,-y-0.25', '-x,z,-y-0.5', '-z+0.75,x+0.25,y+0.25', + '-x+0.5,-z,y', 'z+0.75,-x-0.25,y-0.25', 'x,z,y-0.5', '-y+0.75,-z+0.25,-x+0.25', + '-y+0.25,z+0.25,x-0.25', '-z+0.5,-y-0.5,x-0.5', 'y+0.25,-z-0.25,x+0.25', 'z+0.5,y,x', + 'y+0.75,z+0.25,-x+0.25', '-z+0.5,y-0.5,-x-0.5', 'z,-y-0.5,-x'] + number: 228 + schoenflies: Oh^8 + universal_h_m: F d -3 c :1 + Im-3m: + spacegroup: Im-3m + crystal_class: cubic + hall: -I 4 2 3 + hermann_mauguin: I m -3 m + symops: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x', 'x+0.5,y+0.5,z+0.5', '-y+0.5,x+0.5,z+0.5', '-x+0.5,-y+0.5,z+0.5', + 'y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,-z+0.5', 'y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,-z+0.5', + '-y+0.5,-x+0.5,-z+0.5', 'z+0.5,x+0.5,y+0.5', '-x+0.5,z+0.5,y+0.5', '-z+0.5,-x+0.5,y+0.5', + 'x+0.5,-z+0.5,y+0.5', 'z+0.5,-x+0.5,-y+0.5', 'x+0.5,z+0.5,-y+0.5', '-z+0.5,x+0.5,-y+0.5', + '-x+0.5,-z+0.5,-y+0.5', 'y+0.5,z+0.5,x+0.5', 'y+0.5,-z+0.5,-x+0.5', 'z+0.5,y+0.5,-x+0.5', + '-y+0.5,z+0.5,-x+0.5', '-z+0.5,-y+0.5,-x+0.5', '-y+0.5,-z+0.5,x+0.5', 'z+0.5,-y+0.5,x+0.5', + '-z+0.5,y+0.5,x+0.5', '-x+0.5,-y+0.5,-z+0.5', 'y+0.5,-x+0.5,-z+0.5', 'x+0.5,y+0.5,-z+0.5', + '-y+0.5,x+0.5,-z+0.5', '-x+0.5,y+0.5,z+0.5', '-y+0.5,-x+0.5,z+0.5', 'x+0.5,-y+0.5,z+0.5', + 'y+0.5,x+0.5,z+0.5', '-z+0.5,-x+0.5,-y+0.5', 'x+0.5,-z+0.5,-y+0.5', 'z+0.5,x+0.5,-y+0.5', + '-x+0.5,z+0.5,-y+0.5', '-z+0.5,x+0.5,y+0.5', '-x+0.5,-z+0.5,y+0.5', 'z+0.5,-x+0.5,y+0.5', + 'x+0.5,z+0.5,y+0.5', '-y+0.5,-z+0.5,-x+0.5', '-y+0.5,z+0.5,x+0.5', '-z+0.5,-y+0.5,x+0.5', + 'y+0.5,-z+0.5,x+0.5', 'z+0.5,y+0.5,x+0.5', 'y+0.5,z+0.5,-x+0.5', '-z+0.5,y+0.5,-x+0.5', + 'z+0.5,-y+0.5,-x+0.5'] + ncsym: ['x,y,z', '-y,x,z', '-x,-y,z', 'y,-x,z', 'x,-y,-z', 'y,x,-z', '-x,y,-z', + '-y,-x,-z', 'z,x,y', '-x,z,y', '-z,-x,y', 'x,-z,y', 'z,-x,-y', 'x,z,-y', '-z,x,-y', + '-x,-z,-y', 'y,z,x', 'y,-z,-x', 'z,y,-x', '-y,z,-x', '-z,-y,-x', '-y,-z,x', + 'z,-y,x', '-z,y,x', '-x,-y,-z', 'y,-x,-z', 'x,y,-z', '-y,x,-z', '-x,y,z', '-y,-x,z', + 'x,-y,z', 'y,x,z', '-z,-x,-y', 'x,-z,-y', 'z,x,-y', '-x,z,-y', '-z,x,y', '-x,-z,y', + 'z,-x,y', 'x,z,y', '-y,-z,-x', '-y,z,x', '-z,-y,x', 'y,-z,x', 'z,y,x', 'y,z,-x', + '-z,y,-x', 'z,-y,-x'] + number: 229 + schoenflies: Oh^9 + universal_h_m: I m -3 m + Ia-3d: + spacegroup: Ia-3d + crystal_class: cubic + hall: -I 4bd 2c 3 + hermann_mauguin: I a -3 d + symops: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x,-y,-z+0.5', 'y+0.25,x+0.75,-z+0.75', '-x+0.5,y,-z', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z,-x,-y+0.5', 'x+0.25,z+0.75,-y+0.75', '-z+0.5,x,-y', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75', '-x,-y,-z', + 'y-0.25,-x-0.75,-z-0.25', 'x-0.5,y,-z-0.5', '-y-0.25,x-0.25,-z-0.75', '-x,y,z-0.5', + '-y-0.25,-x-0.75,z-0.75', 'x-0.5,-y,z', 'y-0.25,x-0.25,z-0.25', '-z,-x,-y', + 'x-0.25,-z-0.75,-y-0.25', 'z-0.5,x,-y-0.5', '-x-0.25,z-0.25,-y-0.75', '-z,x,y-0.5', + '-x-0.25,-z-0.75,y-0.75', 'z-0.5,-x,y', 'x-0.25,z-0.25,y-0.25', '-y,-z,-x', + '-y-0.5,z-0.5,x', '-z-0.75,-y-0.25,x-0.25', 'y,-z-0.5,x-0.5', 'z-0.25,y-0.25,x-0.25', + 'y-0.5,z,-x-0.5', '-z-0.75,y-0.75,-x-0.25', 'z-0.75,-y-0.25,-x-0.75', 'x+0.5,y+0.5,z+0.5', + '-y+0.75,x+1.25,z+0.75', '-x+1,-y+0.5,z+1', 'y+0.75,-x+0.75,z+1.25', 'x+0.5,-y+0.5,-z+1', + 'y+0.75,x+1.25,-z+1.25', '-x+1,y+0.5,-z+0.5', '-y+0.75,-x+0.75,-z+0.75', 'z+0.5,x+0.5,y+0.5', + '-x+0.75,z+1.25,y+0.75', '-z+1,-x+0.5,y+1', 'x+0.75,-z+0.75,y+1.25', 'z+0.5,-x+0.5,-y+1', + 'x+0.75,z+1.25,-y+1.25', '-z+1,x+0.5,-y+0.5', '-x+0.75,-z+0.75,-y+0.75', 'y+0.5,z+0.5,x+0.5', + 'y+1,-z+1,-x+0.5', 'z+1.25,y+0.75,-x+0.75', '-y+0.5,z+1,-x+1', '-z+0.75,-y+0.75,-x+0.75', + '-y+1,-z+0.5,x+1', 'z+1.25,-y+1.25,x+0.75', '-z+1.25,y+0.75,x+1.25', '-x+0.5,-y+0.5,-z+0.5', + 'y+0.25,-x-0.25,-z+0.25', 'x,y+0.5,-z', '-y+0.25,x+0.25,-z-0.25', '-x+0.5,y+0.5,z', + '-y+0.25,-x-0.25,z-0.25', 'x,-y+0.5,z+0.5', 'y+0.25,x+0.25,z+0.25', '-z+0.5,-x+0.5,-y+0.5', + 'x+0.25,-z-0.25,-y+0.25', 'z,x+0.5,-y', '-x+0.25,z+0.25,-y-0.25', '-z+0.5,x+0.5,y', + '-x+0.25,-z-0.25,y-0.25', 'z,-x+0.5,y+0.5', 'x+0.25,z+0.25,y+0.25', '-y+0.5,-z+0.5,-x+0.5', + '-y,z,x+0.5', '-z-0.25,-y+0.25,x+0.25', 'y+0.5,-z,x', 'z+0.25,y+0.25,x+0.25', + 'y,z+0.5,-x', '-z-0.25,y-0.25,-x+0.25', 'z-0.25,-y+0.25,-x-0.25'] + ncsym: ['x,y,z', '-y+0.25,x+0.75,z+0.25', '-x+0.5,-y,z+0.5', 'y+0.25,-x+0.25,z+0.75', + 'x,-y,-z+0.5', 'y+0.25,x+0.75,-z+0.75', '-x+0.5,y,-z', '-y+0.25,-x+0.25,-z+0.25', + 'z,x,y', '-x+0.25,z+0.75,y+0.25', '-z+0.5,-x,y+0.5', 'x+0.25,-z+0.25,y+0.75', + 'z,-x,-y+0.5', 'x+0.25,z+0.75,-y+0.75', '-z+0.5,x,-y', '-x+0.25,-z+0.25,-y+0.25', + 'y,z,x', 'y+0.5,-z+0.5,-x', 'z+0.75,y+0.25,-x+0.25', '-y,z+0.5,-x+0.5', '-z+0.25,-y+0.25,-x+0.25', + '-y+0.5,-z,x+0.5', 'z+0.75,-y+0.75,x+0.25', '-z+0.75,y+0.25,x+0.75', '-x,-y,-z', + 'y-0.25,-x-0.75,-z-0.25', 'x-0.5,y,-z-0.5', '-y-0.25,x-0.25,-z-0.75', '-x,y,z-0.5', + '-y-0.25,-x-0.75,z-0.75', 'x-0.5,-y,z', 'y-0.25,x-0.25,z-0.25', '-z,-x,-y', + 'x-0.25,-z-0.75,-y-0.25', 'z-0.5,x,-y-0.5', '-x-0.25,z-0.25,-y-0.75', '-z,x,y-0.5', + '-x-0.25,-z-0.75,y-0.75', 'z-0.5,-x,y', 'x-0.25,z-0.25,y-0.25', '-y,-z,-x', + '-y-0.5,z-0.5,x', '-z-0.75,-y-0.25,x-0.25', 'y,-z-0.5,x-0.5', 'z-0.25,y-0.25,x-0.25', + 'y-0.5,z,-x-0.5', '-z-0.75,y-0.75,-x-0.25', 'z-0.75,-y-0.25,-x-0.75'] + number: 230 + schoenflies: Oh^10 + universal_h_m: I a -3 d diff --git a/src/xrpd_toolbox/fit_engine/constants/symmetry_operations.yaml b/src/xrpd_toolbox/fit_engine/constants/symmetry_operations.yaml new file mode 100644 index 0000000..eef9682 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/constants/symmetry_operations.yaml @@ -0,0 +1,24300 @@ +# This file has been modified from cod-tools +# (https://aiida-core.readthedocs.io/en/latest/plugins/codtools/), which is +# distributed under the GNU GPL v2 license. The main modifications are with +# respect to conversion to a YAML format and removal of the constraints key. +# +# GNU GENERAL PUBLIC LICENSE +# Version 2, June 1991 +# +# Copyright (C) 1989, 1991 Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# Everyone is permitted to copy and distribute verbatim copies +# of this license document, but changing it is not allowed. +# +# Preamble +# +# The licenses for most software are designed to take away your +# freedom to share and change it. By contrast, the GNU General Public +# License is intended to guarantee your freedom to share and change free +# software--to make sure the software is free for all its users. This +# General Public License applies to most of the Free Software +# Foundation's software and to any other program whose authors commit to +# using it. (Some other Free Software Foundation software is covered by +# the GNU Lesser General Public License instead.) You can apply it to +# your programs, too. +# +# When we speak of free software, we are referring to freedom, not +# price. Our General Public Licenses are designed to make sure that you +# have the freedom to distribute copies of free software (and charge for +# this service if you wish), that you receive source code or can get it +# if you want it, that you can change the software or use pieces of it +# in new free programs; and that you know you can do these things. +# +# To protect your rights, we need to make restrictions that forbid +# anyone to deny you these rights or to ask you to surrender the rights. +# These restrictions translate to certain responsibilities for you if you +# distribute copies of the software, or if you modify it. +# +# For example, if you distribute copies of such a program, whether +# gratis or for a fee, you must give the recipients all the rights that +# you have. You must make sure that they, too, receive or can get the +# source code. And you must show them these terms so they know their +# rights. +# +# We protect your rights with two steps: (1) copyright the software, and +# (2) offer you this license which gives you legal permission to copy, +# distribute and/or modify the software. +# +# Also, for each author's protection and ours, we want to make certain +# that everyone understands that there is no warranty for this free +# software. If the software is modified by someone else and passed on, we +# want its recipients to know that what they have is not the original, so +# that any problems introduced by others will not reflect on the original +# authors' reputations. +# +# Finally, any free program is threatened constantly by software +# patents. We wish to avoid the danger that redistributors of a free +# program will individually obtain patent licenses, in effect making the +# program proprietary. To prevent this, we have made it clear that any +# patent must be licensed for everyone's free use or not licensed at all. +# +# The precise terms and conditions for copying, distribution and +# modification follow. +# +# GNU GENERAL PUBLIC LICENSE +# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +# +# 0. This License applies to any program or other work which contains +# a notice placed by the copyright holder saying it may be distributed +# under the terms of this General Public License. The "Program", below, +# refers to any such program or work, and a "work based on the Program" +# means either the Program or any derivative work under copyright law: +# that is to say, a work containing the Program or a portion of it, +# either verbatim or with modifications and/or translated into another +# language. (Hereinafter, translation is included without limitation in +# the term "modification".) Each licensee is addressed as "you". +# +# Activities other than copying, distribution and modification are not +# covered by this License; they are outside its scope. The act of +# running the Program is not restricted, and the output from the Program +# is covered only if its contents constitute a work based on the +# Program (independent of having been made by running the Program). +# Whether that is true depends on what the Program does. +# +# 1. You may copy and distribute verbatim copies of the Program's +# source code as you receive it, in any medium, provided that you +# conspicuously and appropriately publish on each copy an appropriate +# copyright notice and disclaimer of warranty; keep intact all the +# notices that refer to this License and to the absence of any warranty; +# and give any other recipients of the Program a copy of this License +# along with the Program. +# +# You may charge a fee for the physical act of transferring a copy, and +# you may at your option offer warranty protection in exchange for a fee. +# +# 2. You may modify your copy or copies of the Program or any portion +# of it, thus forming a work based on the Program, and copy and +# distribute such modifications or work under the terms of Section 1 +# above, provided that you also meet all of these conditions: +# +# a) You must cause the modified files to carry prominent notices +# stating that you changed the files and the date of any change. +# +# b) You must cause any work that you distribute or publish, that in +# whole or in part contains or is derived from the Program or any +# part thereof, to be licensed as a whole at no charge to all third +# parties under the terms of this License. +# +# c) If the modified program normally reads commands interactively +# when run, you must cause it, when started running for such +# interactive use in the most ordinary way, to print or display an +# announcement including an appropriate copyright notice and a +# notice that there is no warranty (or else, saying that you provide +# a warranty) and that users may redistribute the program under +# these conditions, and telling the user how to view a copy of this +# License. (Exception: if the Program itself is interactive but +# does not normally print such an announcement, your work based on +# the Program is not required to print an announcement.) +# +# These requirements apply to the modified work as a whole. If +# identifiable sections of that work are not derived from the Program, +# and can be reasonably considered independent and separate works in +# themselves, then this License, and its terms, do not apply to those +# sections when you distribute them as separate works. But when you +# distribute the same sections as part of a whole which is a work based +# on the Program, the distribution of the whole must be on the terms of +# this License, whose permissions for other licensees extend to the +# entire whole, and thus to each and every part regardless of who wrote it. +# +# Thus, it is not the intent of this section to claim rights or contest +# your rights to work written entirely by you; rather, the intent is to +# exercise the right to control the distribution of derivative or +# collective works based on the Program. +# +# In addition, mere aggregation of another work not based on the Program +# with the Program (or with a work based on the Program) on a volume of +# a storage or distribution medium does not bring the other work under +# the scope of this License. +# +# 3. You may copy and distribute the Program (or a work based on it, +# under Section 2) in object code or executable form under the terms of +# Sections 1 and 2 above provided that you also do one of the following: +# +# a) Accompany it with the complete corresponding machine-readable +# source code, which must be distributed under the terms of Sections +# 1 and 2 above on a medium customarily used for software interchange; or, +# +# b) Accompany it with a written offer, valid for at least three +# years, to give any third party, for a charge no more than your +# cost of physically performing source distribution, a complete +# machine-readable copy of the corresponding source code, to be +# distributed under the terms of Sections 1 and 2 above on a medium +# customarily used for software interchange; or, +# +# c) Accompany it with the information you received as to the offer +# to distribute corresponding source code. (This alternative is +# allowed only for noncommercial distribution and only if you +# received the program in object code or executable form with such +# an offer, in accord with Subsection b above.) +# +# The source code for a work means the preferred form of the work for +# making modifications to it. For an executable work, complete source +# code means all the source code for all modules it contains, plus any +# associated interface definition files, plus the scripts used to +# control compilation and installation of the executable. However, as a +# special exception, the source code distributed need not include +# anything that is normally distributed (in either source or binary +# form) with the major components (compiler, kernel, and so on) of the +# operating system on which the executable runs, unless that component +# itself accompanies the executable. +# +# If distribution of executable or object code is made by offering +# access to copy from a designated place, then offering equivalent +# access to copy the source code from the same place counts as +# distribution of the source code, even though third parties are not +# compelled to copy the source along with the object code. +# +# 4. You may not copy, modify, sublicense, or distribute the Program +# except as expressly provided under this License. Any attempt +# otherwise to copy, modify, sublicense or distribute the Program is +# void, and will automatically terminate your rights under this License. +# However, parties who have received copies, or rights, from you under +# this License will not have their licenses terminated so long as such +# parties remain in full compliance. +# +# 5. You are not required to accept this License, since you have not +# signed it. However, nothing else grants you permission to modify or +# distribute the Program or its derivative works. These actions are +# prohibited by law if you do not accept this License. Therefore, by +# modifying or distributing the Program (or any work based on the +# Program), you indicate your acceptance of this License to do so, and +# all its terms and conditions for copying, distributing or modifying +# the Program or works based on it. +# +# 6. Each time you redistribute the Program (or any work based on the +# Program), the recipient automatically receives a license from the +# original licensor to copy, distribute or modify the Program subject to +# these terms and conditions. You may not impose any further +# restrictions on the recipients' exercise of the rights granted herein. +# You are not responsible for enforcing compliance by third parties to +# this License. +# +# 7. If, as a consequence of a court judgment or allegation of patent +# infringement or for any other reason (not limited to patent issues), +# conditions are imposed on you (whether by court order, agreement or +# otherwise) that contradict the conditions of this License, they do not +# excuse you from the conditions of this License. If you cannot +# distribute so as to satisfy simultaneously your obligations under this +# License and any other pertinent obligations, then as a consequence you +# may not distribute the Program at all. For example, if a patent +# license would not permit royalty-free redistribution of the Program by +# all those who receive copies directly or indirectly through you, then +# the only way you could satisfy both it and this License would be to +# refrain entirely from distribution of the Program. +# +# If any portion of this section is held invalid or unenforceable under +# any particular circumstance, the balance of the section is intended to +# apply and the section as a whole is intended to apply in other +# circumstances. +# +# It is not the purpose of this section to induce you to infringe any +# patents or other property right claims or to contest validity of any +# such claims; this section has the sole purpose of protecting the +# integrity of the free software distribution system, which is +# implemented by public license practices. Many people have made +# generous contributions to the wide range of software distributed +# through that system in reliance on consistent application of that +# system; it is up to the author/donor to decide if he or she is willing +# to distribute software through any other system and a licensee cannot +# impose that choice. +# +# This section is intended to make thoroughly clear what is believed to +# be a consequence of the rest of this License. +# +# 8. If the distribution and/or use of the Program is restricted in +# certain countries either by patents or by copyrighted interfaces, the +# original copyright holder who places the Program under this License +# may add an explicit geographical distribution limitation excluding +# those countries, so that distribution is permitted only in or among +# countries not thus excluded. In such case, this License incorporates +# the limitation as if written in the body of this License. +# +# 9. The Free Software Foundation may publish revised and/or new versions +# of the General Public License from time to time. Such new versions will +# be similar in spirit to the present version, but may differ in detail to +# address new problems or concerns. +# +# Each version is given a distinguishing version number. If the Program +# specifies a version number of this License which applies to it and "any +# later version", you have the option of following the terms and conditions +# either of that version or of any later version published by the Free +# Software Foundation. If the Program does not specify a version number of +# this License, you may choose any version ever published by the Free Software +# Foundation. +# +# 10. If you wish to incorporate parts of the Program into other free +# programs whose distribution conditions are different, write to the author +# to ask for permission. For software which is copyrighted by the Free +# Software Foundation, write to the Free Software Foundation; we sometimes +# make exceptions for this. Our decision will be guided by the two goals +# of preserving the free status of all derivatives of our free software and +# of promoting the sharing and reuse of software generally. +# +# NO WARRANTY +# +# 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +# FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +# OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +# PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +# OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +# TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +# PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +# REPAIR OR CORRECTION. +# +# 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +# WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +# REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +# INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +# OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +# TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +# YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +# PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGES. +# +# END OF TERMS AND CONDITIONS +# +# How to Apply These Terms to Your New Programs +# +# If you develop a new program, and you want it to be of the greatest +# possible use to the public, the best way to achieve this is to make it +# free software which everyone can redistribute and change under these terms. +# +# To do so, attach the following notices to the program. It is safest +# to attach them to the start of each source file to most effectively +# convey the exclusion of warranty; and each file should have at least +# the "copyright" line and a pointer to where the full notice is found. +# +# +# Copyright (C) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Also add information on how to contact you by electronic and paper mail. +# +# If the program is interactive, make it output a short notice like this +# when it starts in an interactive mode: +# +# Gnomovision version 69, Copyright (C) year name of author +# Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +# This is free software, and you are welcome to redistribute it +# under certain conditions; type `show c' for details. +# +# The hypothetical commands `show w' and `show c' should show the appropriate +# parts of the General Public License. Of course, the commands you use may +# be called something other than `show w' and `show c'; they could even be +# mouse-clicks or menu items--whatever suits your program. +# +# You should also get your employer (if you work as a programmer) or your +# school, if any, to sign a "copyright disclaimer" for the program, if +# necessary. Here is a sample; alter the names: +# +# Yoyodyne, Inc., hereby disclaims all copyright interest in the program +# `Gnomovision' (which makes passes at compilers) written by James Hacker. +# +# , 1 April 1989 +# Ty Coon, President of Vice +# +# This General Public License does not permit incorporating your program into +# proprietary programs. If your program is a subroutine library, you may +# consider it more useful to permit linking proprietary applications with the +# library. If this is what you want to do, use the GNU Lesser General +# Public License instead of this License. + +- crystal_class: triclinic + hall: " P 1" + hermann_mauguin: P 1 + ncsym: + - x,y,z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + universal_h_m: P 1 +- crystal_class: triclinic + hall: -P 1 + hermann_mauguin: P -1 + ncsym: + - x,y,z + - -x,-y,-z + number: 2 + schoenflies: Ci^1 + symops: + - x,y,z + - -x,-y,-z + universal_h_m: P -1 +- crystal_class: monoclinic + hall: " P 2y" + hermann_mauguin: P 1 2 1 + ncsym: + - x,y,z + - -x,y,-z + number: 3 + schoenflies: C2^1 + symops: + - x,y,z + - -x,y,-z + universal_h_m: P 1 2 1 +- crystal_class: monoclinic + hall: " P 2" + hermann_mauguin: P 1 1 2 + ncsym: + - x,y,z + - -x,-y,z + number: 3 + schoenflies: C2^1 + symops: + - x,y,z + - -x,-y,z + universal_h_m: P 1 1 2 +- crystal_class: monoclinic + hall: " P 2x" + hermann_mauguin: P 2 1 1 + ncsym: + - x,y,z + - x,-y,-z + number: 3 + schoenflies: C2^1 + symops: + - x,y,z + - x,-y,-z + universal_h_m: P 2 1 1 +- crystal_class: monoclinic + hall: " P 2yb" + hermann_mauguin: P 1 21 1 + ncsym: + - x,y,z + - -x,y+1/2,-z + number: 4 + schoenflies: C2^2 + symops: + - x,y,z + - -x,y+1/2,-z + universal_h_m: P 1 21 1 +- crystal_class: monoclinic + hall: " P 2c" + hermann_mauguin: P 1 1 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 4 + schoenflies: C2^2 + symops: + - x,y,z + - -x,-y,z+1/2 + universal_h_m: P 1 1 21 +- crystal_class: monoclinic + hall: " P 2xa" + hermann_mauguin: P 21 1 1 + ncsym: + - x,y,z + - x+1/2,-y,-z + number: 4 + schoenflies: C2^2 + symops: + - x,y,z + - x+1/2,-y,-z + universal_h_m: P 21 1 1 +- crystal_class: monoclinic + hall: " C 2y" + hermann_mauguin: C 1 2 1 + ncsym: + - x,y,z + - -x,y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,y,-z + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + universal_h_m: C 1 2 1 +- crystal_class: monoclinic + hall: " A 2y" + hermann_mauguin: A 1 2 1 + ncsym: + - x,y,z + - -x,y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,y,-z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A 1 2 1 +- crystal_class: monoclinic + hall: " I 2y" + hermann_mauguin: I 1 2 1 + ncsym: + - x,y,z + - -x,y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I 1 2 1 +- crystal_class: monoclinic + hall: " A 2" + hermann_mauguin: A 1 1 2 + ncsym: + - x,y,z + - -x,-y,z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + universal_h_m: A 1 1 2 +- crystal_class: monoclinic + hall: " B 2" + hermann_mauguin: B 1 1 2 + ncsym: + - x,y,z + - -x,-y,z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + universal_h_m: B 1 1 2 +- crystal_class: monoclinic + hall: " I 2" + hermann_mauguin: I 1 1 2 + ncsym: + - x,y,z + - -x,-y,z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + universal_h_m: I 1 1 2 +- crystal_class: monoclinic + hall: " B 2x" + hermann_mauguin: B 2 1 1 + ncsym: + - x,y,z + - x,-y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - x,-y,-z + - x+1/2,y,z+1/2 + - x+1/2,-y,-z+1/2 + universal_h_m: B 2 1 1 +- crystal_class: monoclinic + hall: " C 2x" + hermann_mauguin: C 2 1 1 + ncsym: + - x,y,z + - x,-y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - x,-y,-z + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,-z + universal_h_m: C 2 1 1 +- crystal_class: monoclinic + hall: " I 2x" + hermann_mauguin: I 2 1 1 + ncsym: + - x,y,z + - x,-y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - x,-y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + universal_h_m: I 2 1 1 +- crystal_class: monoclinic + hall: " P -2y" + hermann_mauguin: P 1 m 1 + ncsym: + - x,y,z + - x,-y,z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - x,-y,z + universal_h_m: P 1 m 1 +- crystal_class: monoclinic + hall: " P -2" + hermann_mauguin: P 1 1 m + ncsym: + - x,y,z + - x,y,-z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - x,y,-z + universal_h_m: P 1 1 m +- crystal_class: monoclinic + hall: " P -2x" + hermann_mauguin: P m 1 1 + ncsym: + - x,y,z + - -x,y,z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - -x,y,z + universal_h_m: P m 1 1 +- crystal_class: monoclinic + hall: " P -2yc" + hermann_mauguin: P 1 c 1 + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x,-y,z+1/2 + universal_h_m: P 1 c 1 +- crystal_class: monoclinic + hall: " P -2yac" + hermann_mauguin: P 1 n 1 + ncsym: + - x,y,z + - x+1/2,-y,z+1/2 + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x+1/2,-y,z+1/2 + universal_h_m: P 1 n 1 +- crystal_class: monoclinic + hall: " P -2ya" + hermann_mauguin: P 1 a 1 + ncsym: + - x,y,z + - x+1/2,-y,z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x+1/2,-y,z + universal_h_m: P 1 a 1 +- crystal_class: monoclinic + hall: " P -2a" + hermann_mauguin: P 1 1 a + ncsym: + - x,y,z + - x+1/2,y,-z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x+1/2,y,-z + universal_h_m: P 1 1 a +- crystal_class: monoclinic + hall: " P -2ab" + hermann_mauguin: P 1 1 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x+1/2,y+1/2,-z + universal_h_m: P 1 1 n +- crystal_class: monoclinic + hall: " P -2b" + hermann_mauguin: P 1 1 b + ncsym: + - x,y,z + - x,y+1/2,-z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x,y+1/2,-z + universal_h_m: P 1 1 b +- crystal_class: monoclinic + hall: " P -2xb" + hermann_mauguin: P b 1 1 + ncsym: + - x,y,z + - -x,y+1/2,z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - -x,y+1/2,z + universal_h_m: P b 1 1 +- crystal_class: monoclinic + hall: " P -2xbc" + hermann_mauguin: P n 1 1 + ncsym: + - x,y,z + - -x,y+1/2,z+1/2 + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - -x,y+1/2,z+1/2 + universal_h_m: P n 1 1 +- crystal_class: monoclinic + hall: " P -2xc" + hermann_mauguin: P c 1 1 + ncsym: + - x,y,z + - -x,y,z+1/2 + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - -x,y,z+1/2 + universal_h_m: P c 1 1 +- crystal_class: monoclinic + hall: " C -2y" + hermann_mauguin: C 1 m 1 + ncsym: + - x,y,z + - x,-y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y,z + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: C 1 m 1 +- crystal_class: monoclinic + hall: " A -2y" + hermann_mauguin: A 1 m 1 + ncsym: + - x,y,z + - x,-y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A 1 m 1 +- crystal_class: monoclinic + hall: " I -2y" + hermann_mauguin: I 1 m 1 + ncsym: + - x,y,z + - x,-y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I 1 m 1 +- crystal_class: monoclinic + hall: " A -2" + hermann_mauguin: A 1 1 m + ncsym: + - x,y,z + - x,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + universal_h_m: A 1 1 m +- crystal_class: monoclinic + hall: " B -2" + hermann_mauguin: B 1 1 m + ncsym: + - x,y,z + - x,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + universal_h_m: B 1 1 m +- crystal_class: monoclinic + hall: " I -2" + hermann_mauguin: I 1 1 m + ncsym: + - x,y,z + - x,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + universal_h_m: I 1 1 m +- crystal_class: monoclinic + hall: " B -2x" + hermann_mauguin: B m 1 1 + ncsym: + - x,y,z + - -x,y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x,y,z + - x+1/2,y,z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: B m 1 1 +- crystal_class: monoclinic + hall: " C -2x" + hermann_mauguin: C m 1 1 + ncsym: + - x,y,z + - -x,y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x,y,z + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,z + universal_h_m: C m 1 1 +- crystal_class: monoclinic + hall: " I -2x" + hermann_mauguin: I m 1 1 + ncsym: + - x,y,z + - -x,y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x,y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: I m 1 1 +- crystal_class: monoclinic + hall: " C -2yc" + hermann_mauguin: C 1 c 1 + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: C 1 c 1 +- crystal_class: monoclinic + hall: " A -2yab" + hermann_mauguin: A 1 n 1 + ncsym: + - x,y,z + - x+1/2,-y+1/2,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - x+1/2,-y+1,z+1/2 + universal_h_m: A 1 n 1 +- crystal_class: monoclinic + hall: " I -2ya" + hermann_mauguin: I 1 a 1 + ncsym: + - x,y,z + - x+1/2,-y,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: I 1 a 1 +- crystal_class: monoclinic + hall: " A -2ya" + hermann_mauguin: A 1 a 1 + ncsym: + - x,y,z + - x+1/2,-y,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: A 1 a 1 +- crystal_class: monoclinic + hall: " C -2yac" + hermann_mauguin: C 1 n 1 + ncsym: + - x,y,z + - x+1/2,-y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1,-y+1/2,z+1/2 + universal_h_m: C 1 n 1 +- crystal_class: monoclinic + hall: " I -2yc" + hermann_mauguin: I 1 c 1 + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x,-y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1 + universal_h_m: I 1 c 1 +- crystal_class: monoclinic + hall: " A -2a" + hermann_mauguin: A 1 1 a + ncsym: + - x,y,z + - x+1/2,y,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,y,-z + - x,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + universal_h_m: A 1 1 a +- crystal_class: monoclinic + hall: " B -2ab" + hermann_mauguin: B 1 1 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - x+1/2,y,z+1/2 + - x+1,y+1/2,-z+1/2 + universal_h_m: B 1 1 n +- crystal_class: monoclinic + hall: " I -2b" + hermann_mauguin: I 1 1 b + ncsym: + - x,y,z + - x,y+1/2,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x,y+1/2,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1,-z+1/2 + universal_h_m: I 1 1 b +- crystal_class: monoclinic + hall: " B -2b" + hermann_mauguin: B 1 1 b + ncsym: + - x,y,z + - x,y+1/2,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x,y+1/2,-z + - x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z+1/2 + universal_h_m: B 1 1 b +- crystal_class: monoclinic + hall: " A -2ab" + hermann_mauguin: A 1 1 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - x,y+1/2,z+1/2 + - x+1/2,y+1,-z+1/2 + universal_h_m: A 1 1 n +- crystal_class: monoclinic + hall: " I -2a" + hermann_mauguin: I 1 1 a + ncsym: + - x,y,z + - x+1/2,y,-z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x+1/2,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1,y+1/2,-z+1/2 + universal_h_m: I 1 1 a +- crystal_class: monoclinic + hall: " B -2xb" + hermann_mauguin: B b 1 1 + ncsym: + - x,y,z + - -x,y+1/2,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x,y+1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: B b 1 1 +- crystal_class: monoclinic + hall: " C -2xac" + hermann_mauguin: C n 1 1 + ncsym: + - x,y,z + - -x+1/2,y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x+1,y+1/2,z+1/2 + universal_h_m: C n 1 1 +- crystal_class: monoclinic + hall: " I -2xc" + hermann_mauguin: I c 1 1 + ncsym: + - x,y,z + - -x,y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x,y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1 + universal_h_m: I c 1 1 +- crystal_class: monoclinic + hall: " C -2xc" + hermann_mauguin: C c 1 1 + ncsym: + - x,y,z + - -x,y,z+1/2 + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x,y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,z+1/2 + universal_h_m: C c 1 1 +- crystal_class: monoclinic + hall: " B -2xab" + hermann_mauguin: B n 1 1 + ncsym: + - x,y,z + - -x+1/2,y+1/2,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x+1,y+1/2,z+1/2 + universal_h_m: B n 1 1 +- crystal_class: monoclinic + hall: " I -2xb" + hermann_mauguin: I b 1 1 + ncsym: + - x,y,z + - -x,y+1/2,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - -x,y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1,z+1/2 + universal_h_m: I b 1 1 +- crystal_class: monoclinic + hall: -P 2y + hermann_mauguin: P 1 2/m 1 + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + universal_h_m: P 1 2/m 1 +- crystal_class: monoclinic + hall: -P 2 + hermann_mauguin: P 1 1 2/m + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + universal_h_m: P 1 1 2/m +- crystal_class: monoclinic + hall: -P 2x + hermann_mauguin: P 2/m 1 1 + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + universal_h_m: P 2/m 1 1 +- crystal_class: monoclinic + hall: -P 2yb + hermann_mauguin: P 1 21/m 1 + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y-1/2,z + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y-1/2,z + universal_h_m: P 1 21/m 1 +- crystal_class: monoclinic + hall: -P 2c + hermann_mauguin: P 1 1 21/m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + universal_h_m: P 1 1 21/m +- crystal_class: monoclinic + hall: -P 2xa + hermann_mauguin: P 21/m 1 1 + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x-1/2,y,z + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x-1/2,y,z + universal_h_m: P 21/m 1 1 +- crystal_class: monoclinic + hall: -C 2y + hermann_mauguin: C 1 2/m 1 + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z + universal_h_m: C 1 2/m 1 +- crystal_class: monoclinic + hall: -A 2y + hermann_mauguin: A 1 2/m 1 + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A 1 2/m 1 +- crystal_class: monoclinic + hall: -I 2y + hermann_mauguin: I 1 2/m 1 + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I 1 2/m 1 +- crystal_class: monoclinic + hall: -A 2 + hermann_mauguin: A 1 1 2/m + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + universal_h_m: A 1 1 2/m +- crystal_class: monoclinic + hall: -B 2 + hermann_mauguin: B 1 1 2/m + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + universal_h_m: B 1 1 2/m +- crystal_class: monoclinic + hall: -I 2 + hermann_mauguin: I 1 1 2/m + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + universal_h_m: I 1 1 2/m +- crystal_class: monoclinic + hall: -B 2x + hermann_mauguin: B 2/m 1 1 + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + - x+1/2,y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: B 2/m 1 1 +- crystal_class: monoclinic + hall: -C 2x + hermann_mauguin: C 2/m 1 1 + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,z + universal_h_m: C 2/m 1 1 +- crystal_class: monoclinic + hall: -I 2x + hermann_mauguin: I 2/m 1 1 + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: I 2/m 1 1 +- crystal_class: monoclinic + hall: -P 2yc + hermann_mauguin: P 1 2/c 1 + ncsym: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + universal_h_m: P 1 2/c 1 +- crystal_class: monoclinic + hall: -P 2yac + hermann_mauguin: P 1 2/n 1 + ncsym: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,-y,z-1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,-y,z-1/2 + universal_h_m: P 1 2/n 1 +- crystal_class: monoclinic + hall: -P 2ya + hermann_mauguin: P 1 2/a 1 + ncsym: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + universal_h_m: P 1 2/a 1 +- crystal_class: monoclinic + hall: -P 2a + hermann_mauguin: P 1 1 2/a + ncsym: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + universal_h_m: P 1 1 2/a +- crystal_class: monoclinic + hall: -P 2ab + hermann_mauguin: P 1 1 2/n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + universal_h_m: P 1 1 2/n +- crystal_class: monoclinic + hall: -P 2b + hermann_mauguin: P 1 1 2/b + ncsym: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + universal_h_m: P 1 1 2/b +- crystal_class: monoclinic + hall: -P 2xb + hermann_mauguin: P 2/b 1 1 + ncsym: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + universal_h_m: P 2/b 1 1 +- crystal_class: monoclinic + hall: -P 2xbc + hermann_mauguin: P 2/n 1 1 + ncsym: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x,-y,-z + - -x,y-1/2,z-1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x,-y,-z + - -x,y-1/2,z-1/2 + universal_h_m: P 2/n 1 1 +- crystal_class: monoclinic + hall: -P 2xc + hermann_mauguin: P 2/c 1 1 + ncsym: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + universal_h_m: P 2/c 1 1 +- crystal_class: monoclinic + hall: -P 2ybc + hermann_mauguin: P 1 21/c 1 + ncsym: + - x,y,z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,-y-1/2,z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,-y-1/2,z-1/2 + universal_h_m: P 1 21/c 1 +- crystal_class: monoclinic + hall: -P 2yn + hermann_mauguin: P 1 21/n 1 + ncsym: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,-y-1/2,z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P 1 21/n 1 +- crystal_class: monoclinic + hall: -P 2yab + hermann_mauguin: P 1 21/a 1 + ncsym: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,-y-1/2,z + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,-y-1/2,z + universal_h_m: P 1 21/a 1 +- crystal_class: monoclinic + hall: -P 2ac + hermann_mauguin: P 1 1 21/a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + universal_h_m: P 1 1 21/a +- crystal_class: monoclinic + hall: -P 2n + hermann_mauguin: P 1 1 21/n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + universal_h_m: P 1 1 21/n +- crystal_class: monoclinic + hall: -P 2bc + hermann_mauguin: P 1 1 21/b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + universal_h_m: P 1 1 21/b +- crystal_class: monoclinic + hall: -P 2xab + hermann_mauguin: P 21/b 1 1 + ncsym: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x-1/2,y-1/2,z + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x-1/2,y-1/2,z + universal_h_m: P 21/b 1 1 +- crystal_class: monoclinic + hall: -P 2xn + hermann_mauguin: P 21/n 1 1 + ncsym: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z + - -x-1/2,y-1/2,z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z + - -x-1/2,y-1/2,z-1/2 + universal_h_m: P 21/n 1 1 +- crystal_class: monoclinic + hall: -P 2xac + hermann_mauguin: P 21/c 1 1 + ncsym: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x,-y,-z + - -x-1/2,y,z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x,-y,-z + - -x-1/2,y,z-1/2 + universal_h_m: P 21/c 1 1 +- crystal_class: monoclinic + hall: -C 2yc + hermann_mauguin: C 1 2/c 1 + ncsym: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z-1/2 + universal_h_m: C 1 2/c 1 +- crystal_class: monoclinic + hall: -A 2yab + hermann_mauguin: A 1 2/n 1 + ncsym: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,-y-1/2,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,-y-1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,-y,z+1/2 + universal_h_m: A 1 2/n 1 +- crystal_class: monoclinic + hall: -I 2ya + hermann_mauguin: I 1 2/a 1 + ncsym: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: I 1 2/a 1 +- crystal_class: monoclinic + hall: -A 2ya + hermann_mauguin: A 1 2/a 1 + ncsym: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,-y+1/2,z+1/2 + universal_h_m: A 1 2/a 1 +- crystal_class: monoclinic + hall: -C 2yac + hermann_mauguin: C 1 2/n 1 + ncsym: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,-y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,-y+1/2,z-1/2 + universal_h_m: C 1 2/n 1 +- crystal_class: monoclinic + hall: -I 2yc + hermann_mauguin: I 1 2/c 1 + ncsym: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z-1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: I 1 2/c 1 +- crystal_class: monoclinic + hall: -A 2a + hermann_mauguin: A 1 1 2/a + ncsym: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y+1/2,-z+1/2 + universal_h_m: A 1 1 2/a +- crystal_class: monoclinic + hall: -B 2ab + hermann_mauguin: B 1 1 2/n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + - x+1/2,y,z+1/2 + - -x+1,-y+1/2,z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y-1/2,-z+1/2 + universal_h_m: B 1 1 2/n +- crystal_class: monoclinic + hall: -I 2b + hermann_mauguin: I 1 1 2/b + ncsym: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + universal_h_m: I 1 1 2/b +- crystal_class: monoclinic + hall: -B 2b + hermann_mauguin: B 1 1 2/b + ncsym: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,-y,-z + - x,y-1/2,-z + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y-1/2,-z+1/2 + universal_h_m: B 1 1 2/b +- crystal_class: monoclinic + hall: -A 2ab + hermann_mauguin: A 1 1 2/n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x-1/2,y-1/2,-z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y,-z+1/2 + universal_h_m: A 1 1 2/n +- crystal_class: monoclinic + hall: -I 2a + hermann_mauguin: I 1 1 2/a + ncsym: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x-1/2,y,-z + - x+1/2,y+1/2,z+1/2 + - -x+1,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + universal_h_m: I 1 1 2/a +- crystal_class: monoclinic + hall: -B 2xb + hermann_mauguin: B 2/b 1 1 + ncsym: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + - x+1/2,y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+1/2,y-1/2,z+1/2 + universal_h_m: B 2/b 1 1 +- crystal_class: monoclinic + hall: -C 2xac + hermann_mauguin: C 2/n 1 1 + ncsym: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x,-y,-z + - -x-1/2,y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x,-y,-z + - -x-1/2,y,z-1/2 + - x+1/2,y+1/2,z + - x+1,-y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - -x,y+1/2,z-1/2 + universal_h_m: C 2/n 1 1 +- crystal_class: monoclinic + hall: -I 2xc + hermann_mauguin: I 2/c 1 1 + ncsym: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + universal_h_m: I 2/c 1 1 +- crystal_class: monoclinic + hall: -C 2xc + hermann_mauguin: C 2/c 1 1 + ncsym: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x,-y,-z+1/2 + - -x,-y,-z + - -x,y,z-1/2 + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,z-1/2 + universal_h_m: C 2/c 1 1 +- crystal_class: monoclinic + hall: -B 2xab + hermann_mauguin: B 2/n 1 1 + ncsym: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x-1/2,y-1/2,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x-1/2,y-1/2,z + - x+1/2,y,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x,y-1/2,z+1/2 + universal_h_m: B 2/n 1 1 +- crystal_class: monoclinic + hall: -I 2xb + hermann_mauguin: I 2/b 1 1 + ncsym: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + number: 15 + schoenflies: C2h^6 + symops: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y-1/2,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: I 2/b 1 1 +- crystal_class: orthorhombic + hall: " P 2 2" + hermann_mauguin: P 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 16 + schoenflies: D2^1 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + universal_h_m: P 2 2 2 +- crystal_class: orthorhombic + hall: " P 2c 2" + hermann_mauguin: P 2 2 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + number: 17 + schoenflies: D2^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + universal_h_m: P 2 2 21 +- crystal_class: orthorhombic + hall: " P 2a 2a" + hermann_mauguin: P 21 2 2 + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + number: 17 + schoenflies: D2^2 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + universal_h_m: P 21 2 2 +- crystal_class: orthorhombic + hall: " P 2 2b" + hermann_mauguin: P 2 21 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + number: 17 + schoenflies: D2^2 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + universal_h_m: P 2 21 2 +- crystal_class: orthorhombic + hall: " P 2 2ab" + hermann_mauguin: P 21 21 2 + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + number: 18 + schoenflies: D2^3 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + universal_h_m: P 21 21 2 +- crystal_class: orthorhombic + hall: " P 2bc 2" + hermann_mauguin: P 2 21 21 + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + number: 18 + schoenflies: D2^3 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + universal_h_m: P 2 21 21 +- crystal_class: orthorhombic + hall: " P 2ac 2ac" + hermann_mauguin: P 21 2 21 + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + number: 18 + schoenflies: D2^3 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + universal_h_m: P 21 2 21 +- crystal_class: orthorhombic + hall: " P 2ac 2ab" + hermann_mauguin: P 21 21 21 + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + number: 19 + schoenflies: D2^4 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + universal_h_m: P 21 21 21 +- crystal_class: orthorhombic + hall: " C 2c 2" + hermann_mauguin: C 2 2 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + number: 20 + schoenflies: D2^5 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: C 2 2 21 +- crystal_class: orthorhombic + hall: " A 2a 2a" + hermann_mauguin: A 21 2 2 + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + number: 20 + schoenflies: D2^5 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A 21 2 2 +- crystal_class: orthorhombic + hall: " B 2 2b" + hermann_mauguin: B 2 21 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + number: 20 + schoenflies: D2^5 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: B 2 21 2 +- crystal_class: orthorhombic + hall: " C 2 2" + hermann_mauguin: C 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 21 + schoenflies: D2^6 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + universal_h_m: C 2 2 2 +- crystal_class: orthorhombic + hall: " A 2 2" + hermann_mauguin: A 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 21 + schoenflies: D2^6 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A 2 2 2 +- crystal_class: orthorhombic + hall: " B 2 2" + hermann_mauguin: B 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 21 + schoenflies: D2^6 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + universal_h_m: B 2 2 2 +- crystal_class: orthorhombic + hall: " F 2 2" + hermann_mauguin: F 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 22 + schoenflies: D2^7 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + universal_h_m: F 2 2 2 +- crystal_class: orthorhombic + hall: " I 2 2" + hermann_mauguin: I 2 2 2 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + number: 23 + schoenflies: D2^8 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I 2 2 2 +- crystal_class: orthorhombic + hall: " I 2b 2c" + hermann_mauguin: I 21 21 21 + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + number: 24 + schoenflies: D2^9 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1,-z+1 + universal_h_m: I 21 21 21 +- crystal_class: orthorhombic + hall: " P 2 -2" + hermann_mauguin: P m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 25 + schoenflies: C2v^1 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + universal_h_m: P m m 2 +- crystal_class: orthorhombic + hall: " P -2 2" + hermann_mauguin: P 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 25 + schoenflies: C2v^1 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + universal_h_m: P 2 m m +- crystal_class: orthorhombic + hall: " P -2 -2" + hermann_mauguin: P m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 25 + schoenflies: C2v^1 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + universal_h_m: P m 2 m +- crystal_class: orthorhombic + hall: " P 2c -2" + hermann_mauguin: P m c 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + universal_h_m: P m c 21 +- crystal_class: orthorhombic + hall: " P 2c -2c" + hermann_mauguin: P c m 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + universal_h_m: P c m 21 +- crystal_class: orthorhombic + hall: " P -2a 2a" + hermann_mauguin: P 21 m a + ncsym: + - x,y,z + - x+1/2,y,-z + - x+1/2,-y,-z + - x,-y,z + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - x+1/2,y,-z + - x+1/2,-y,-z + - x,-y,z + universal_h_m: P 21 m a +- crystal_class: orthorhombic + hall: " P -2 2a" + hermann_mauguin: P 21 a m + ncsym: + - x,y,z + - x,y,-z + - x+1/2,-y,-z + - x+1/2,-y,z + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - x,y,-z + - x+1/2,-y,-z + - x+1/2,-y,z + universal_h_m: P 21 a m +- crystal_class: orthorhombic + hall: " P -2 -2b" + hermann_mauguin: P b 21 m + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + universal_h_m: P b 21 m +- crystal_class: orthorhombic + hall: " P -2b -2" + hermann_mauguin: P m 21 b + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + universal_h_m: P m 21 b +- crystal_class: orthorhombic + hall: " P 2 -2c" + hermann_mauguin: P c c 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + number: 27 + schoenflies: C2v^3 + symops: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + universal_h_m: P c c 2 +- crystal_class: orthorhombic + hall: " P -2a 2" + hermann_mauguin: P 2 a a + ncsym: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + number: 27 + schoenflies: C2v^3 + symops: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + universal_h_m: P 2 a a +- crystal_class: orthorhombic + hall: " P -2b -2b" + hermann_mauguin: P b 2 b + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + number: 27 + schoenflies: C2v^3 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + universal_h_m: P b 2 b +- crystal_class: orthorhombic + hall: " P 2 -2a" + hermann_mauguin: P m a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + universal_h_m: P m a 2 +- crystal_class: orthorhombic + hall: " P 2 -2b" + hermann_mauguin: P b m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + universal_h_m: P b m 2 +- crystal_class: orthorhombic + hall: " P -2b 2" + hermann_mauguin: P 2 m b + ncsym: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + universal_h_m: P 2 m b +- crystal_class: orthorhombic + hall: " P -2c 2" + hermann_mauguin: P 2 c m + ncsym: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + universal_h_m: P 2 c m +- crystal_class: orthorhombic + hall: " P -2c -2c" + hermann_mauguin: P c 2 m + ncsym: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + universal_h_m: P c 2 m +- crystal_class: orthorhombic + hall: " P -2a -2a" + hermann_mauguin: P m 2 a + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + number: 28 + schoenflies: C2v^4 + symops: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + universal_h_m: P m 2 a +- crystal_class: orthorhombic + hall: " P 2c -2ac" + hermann_mauguin: P c a 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z + universal_h_m: P c a 21 +- crystal_class: orthorhombic + hall: " P 2c -2b" + hermann_mauguin: P b c 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y+1/2,z + - x,-y+1/2,z+1/2 + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,y+1/2,z + - x,-y+1/2,z+1/2 + universal_h_m: P b c 21 +- crystal_class: orthorhombic + hall: " P -2b 2a" + hermann_mauguin: P 21 a b + ncsym: + - x,y,z + - x,y+1/2,-z + - x+1/2,-y,-z + - x+1/2,-y+1/2,z + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - x,y+1/2,-z + - x+1/2,-y,-z + - x+1/2,-y+1/2,z + universal_h_m: P 21 a b +- crystal_class: orthorhombic + hall: " P -2ac 2a" + hermann_mauguin: P 21 c a + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - x+1/2,-y,-z + - x,-y,z+1/2 + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - x+1/2,-y,-z + - x,-y,z+1/2 + universal_h_m: P 21 c a +- crystal_class: orthorhombic + hall: " P -2bc -2c" + hermann_mauguin: P c 21 b + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - -x,y+1/2,-z + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - -x,y+1/2,-z + universal_h_m: P c 21 b +- crystal_class: orthorhombic + hall: " P -2a -2ab" + hermann_mauguin: P b 21 a + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y+1/2,z + - -x,y+1/2,-z + number: 29 + schoenflies: C2v^5 + symops: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y+1/2,z + - -x,y+1/2,-z + universal_h_m: P b 21 a +- crystal_class: orthorhombic + hall: " P 2 -2bc" + hermann_mauguin: P n c 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - -x,-y,z + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: P n c 2 +- crystal_class: orthorhombic + hall: " P 2 -2ac" + hermann_mauguin: P c n 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P c n 2 +- crystal_class: orthorhombic + hall: " P -2ac 2" + hermann_mauguin: P 2 n a + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - x,-y,-z + - x+1/2,-y,z+1/2 + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - x,-y,-z + - x+1/2,-y,z+1/2 + universal_h_m: P 2 n a +- crystal_class: orthorhombic + hall: " P -2ab 2" + hermann_mauguin: P 2 a n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - x,-y,-z + - x+1/2,-y+1/2,z + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - x,-y,-z + - x+1/2,-y+1/2,z + universal_h_m: P 2 a n +- crystal_class: orthorhombic + hall: " P -2ab -2ab" + hermann_mauguin: P b 2 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x,y,-z + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x,y,-z + universal_h_m: P b 2 n +- crystal_class: orthorhombic + hall: " P -2bc -2bc" + hermann_mauguin: P n 2 b + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -x,y,-z + number: 30 + schoenflies: C2v^6 + symops: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -x,y,-z + universal_h_m: P n 2 b +- crystal_class: orthorhombic + hall: " P 2ac -2" + hermann_mauguin: P m n 21 + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,y,z + - x+1/2,-y,z+1/2 + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,y,z + - x+1/2,-y,z+1/2 + universal_h_m: P m n 21 +- crystal_class: orthorhombic + hall: " P 2bc -2bc" + hermann_mauguin: P n m 21 + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z + universal_h_m: P n m 21 +- crystal_class: orthorhombic + hall: " P -2ab 2ab" + hermann_mauguin: P 21 m n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - x+1/2,-y+1/2,-z + - x,-y,z + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - x+1/2,-y+1/2,-z + - x,-y,z + universal_h_m: P 21 m n +- crystal_class: orthorhombic + hall: " P -2 2ac" + hermann_mauguin: P 21 n m + ncsym: + - x,y,z + - x,y,-z + - x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - x,y,-z + - x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P 21 n m +- crystal_class: orthorhombic + hall: " P -2 -2bc" + hermann_mauguin: P n 21 m + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - x,y,-z + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: P n 21 m +- crystal_class: orthorhombic + hall: " P -2ab -2" + hermann_mauguin: P m 21 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x,y,z + - -x+1/2,y+1/2,-z + number: 31 + schoenflies: C2v^7 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - -x,y,z + - -x+1/2,y+1/2,-z + universal_h_m: P m 21 n +- crystal_class: orthorhombic + hall: " P 2 -2ab" + hermann_mauguin: P b a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 32 + schoenflies: C2v^8 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: P b a 2 +- crystal_class: orthorhombic + hall: " P -2bc 2" + hermann_mauguin: P 2 c b + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - x,-y,-z + - x,-y+1/2,z+1/2 + number: 32 + schoenflies: C2v^8 + symops: + - x,y,z + - x,y+1/2,-z+1/2 + - x,-y,-z + - x,-y+1/2,z+1/2 + universal_h_m: P 2 c b +- crystal_class: orthorhombic + hall: " P -2ac -2ac" + hermann_mauguin: P c 2 a + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y,-z + number: 32 + schoenflies: C2v^8 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y,-z + universal_h_m: P c 2 a +- crystal_class: orthorhombic + hall: " P 2c -2n" + hermann_mauguin: P n a 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: P n a 21 +- crystal_class: orthorhombic + hall: " P 2c -2ab" + hermann_mauguin: P b n 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P b n 21 +- crystal_class: orthorhombic + hall: " P -2bc 2a" + hermann_mauguin: P 21 n b + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - x+1/2,-y,-z + - x+1/2,-y+1/2,z+1/2 + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - x,y+1/2,-z+1/2 + - x+1/2,-y,-z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 21 n b +- crystal_class: orthorhombic + hall: " P -2n 2a" + hermann_mauguin: P 21 c n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y,-z + - x,-y+1/2,z+1/2 + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y,-z + - x,-y+1/2,z+1/2 + universal_h_m: P 21 c n +- crystal_class: orthorhombic + hall: " P -2n -2ac" + hermann_mauguin: P c 21 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y+1/2,-z + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y+1/2,-z + universal_h_m: P c 21 n +- crystal_class: orthorhombic + hall: " P -2ac -2n" + hermann_mauguin: P n 21 a + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + number: 33 + schoenflies: C2v^9 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + universal_h_m: P n 21 a +- crystal_class: orthorhombic + hall: " P 2 -2n" + hermann_mauguin: P n n 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 34 + schoenflies: C2v^10 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P n n 2 +- crystal_class: orthorhombic + hall: " P -2n 2" + hermann_mauguin: P 2 n n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - x,-y,-z + - x+1/2,-y+1/2,z+1/2 + number: 34 + schoenflies: C2v^10 + symops: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - x,-y,-z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 2 n n +- crystal_class: orthorhombic + hall: " P -2n -2n" + hermann_mauguin: P n 2 n + ncsym: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y,-z + number: 34 + schoenflies: C2v^10 + symops: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y,-z + universal_h_m: P n 2 n +- crystal_class: orthorhombic + hall: " C 2 -2" + hermann_mauguin: C m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: C m m 2 +- crystal_class: orthorhombic + hall: " A -2 2" + hermann_mauguin: A 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A 2 m m +- crystal_class: orthorhombic + hall: " B -2 -2" + hermann_mauguin: B m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + universal_h_m: B m 2 m +- crystal_class: orthorhombic + hall: " C 2c -2" + hermann_mauguin: C m c 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: C m c 21 +- crystal_class: orthorhombic + hall: " C 2c -2c" + hermann_mauguin: C c m 21 + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: C c m 21 +- crystal_class: orthorhombic + hall: " A -2a 2a" + hermann_mauguin: A 21 m a + ncsym: + - x,y,z + - x+1/2,y,-z + - x+1/2,-y,-z + - x,-y,z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - x+1/2,y,-z + - x+1/2,-y,-z + - x,-y,z + - x,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A 21 m a +- crystal_class: orthorhombic + hall: " A -2 2a" + hermann_mauguin: A 21 a m + ncsym: + - x,y,z + - x,y,-z + - x+1/2,-y,-z + - x+1/2,-y,z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - x,y,-z + - x+1/2,-y,-z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: A 21 a m +- crystal_class: orthorhombic + hall: " B -2 -2b" + hermann_mauguin: B b 21 m + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: B b 21 m +- crystal_class: orthorhombic + hall: " B -2b -2" + hermann_mauguin: B m 21 b + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + - x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: B m 21 b +- crystal_class: orthorhombic + hall: " C 2 -2c" + hermann_mauguin: C c c 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + number: 37 + schoenflies: C2v^13 + symops: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: C c c 2 +- crystal_class: orthorhombic + hall: " A -2a 2" + hermann_mauguin: A 2 a a + ncsym: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + number: 37 + schoenflies: C2v^13 + symops: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: A 2 a a +- crystal_class: orthorhombic + hall: " B -2b -2b" + hermann_mauguin: B b 2 b + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + number: 37 + schoenflies: C2v^13 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + - x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x+1/2,y,-z+1/2 + universal_h_m: B b 2 b +- crystal_class: orthorhombic + hall: " A 2 -2" + hermann_mauguin: A m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A m m 2 +- crystal_class: orthorhombic + hall: " B 2 -2" + hermann_mauguin: B m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: B m m 2 +- crystal_class: orthorhombic + hall: " B -2 2" + hermann_mauguin: B 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + - x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: B 2 m m +- crystal_class: orthorhombic + hall: " C -2 2" + hermann_mauguin: C 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + - x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z + universal_h_m: C 2 m m +- crystal_class: orthorhombic + hall: " C -2 -2" + hermann_mauguin: C m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + universal_h_m: C m 2 m +- crystal_class: orthorhombic + hall: " A -2 -2" + hermann_mauguin: A m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A m 2 m +- crystal_class: orthorhombic + hall: " A 2 -2b" + hermann_mauguin: A e m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,y+1,z+1/2 + - x,-y+1,z+1/2 + universal_h_m: A e m 2 +- crystal_class: orthorhombic + hall: " B 2 -2a" + hermann_mauguin: B m e 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1,y,z+1/2 + - x+1,-y,z+1/2 + universal_h_m: B m e 2 +- crystal_class: orthorhombic + hall: " B -2a 2" + hermann_mauguin: B 2 e m + ncsym: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + - x+1/2,y,z+1/2 + - x+1,y,-z+1/2 + - x+1/2,-y,-z+1/2 + - x+1,-y,z+1/2 + universal_h_m: B 2 e m +- crystal_class: orthorhombic + hall: " C -2a 2" + hermann_mauguin: C 2 m e + ncsym: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + - x+1/2,y+1/2,z + - x+1,y+1/2,-z + - x+1/2,-y+1/2,-z + - x+1,-y+1/2,z + universal_h_m: C 2 m e +- crystal_class: orthorhombic + hall: " C -2a -2a" + hermann_mauguin: C m 2 e + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + - x+1/2,y+1/2,z + - x+1,y+1/2,-z + - -x+1,y+1/2,z + - -x+1/2,y+1/2,-z + universal_h_m: C m 2 e +- crystal_class: orthorhombic + hall: " A -2b -2b" + hermann_mauguin: A e 2 m + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + - x,y+1/2,z+1/2 + - x,y+1,-z+1/2 + - -x,y+1,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A e 2 m +- crystal_class: orthorhombic + hall: " A 2 -2a" + hermann_mauguin: A m a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: A m a 2 +- crystal_class: orthorhombic + hall: " B 2 -2b" + hermann_mauguin: B b m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: B b m 2 +- crystal_class: orthorhombic + hall: " B -2b 2" + hermann_mauguin: B 2 m b + ncsym: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + - x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: B 2 m b +- crystal_class: orthorhombic + hall: " C -2c 2" + hermann_mauguin: C 2 c m + ncsym: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: C 2 c m +- crystal_class: orthorhombic + hall: " C -2c -2c" + hermann_mauguin: C c 2 m + ncsym: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z + universal_h_m: C c 2 m +- crystal_class: orthorhombic + hall: " A -2a -2a" + hermann_mauguin: A m 2 a + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + - x,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A m 2 a +- crystal_class: orthorhombic + hall: " A 2 -2ab" + hermann_mauguin: A e a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x+1/2,y+1,z+1/2 + - x+1/2,-y+1,z+1/2 + universal_h_m: A e a 2 +- crystal_class: orthorhombic + hall: " B 2 -2ab" + hermann_mauguin: B b e 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1,y+1/2,z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: B b e 2 +- crystal_class: orthorhombic + hall: " B -2ab 2" + hermann_mauguin: B 2 e b + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - x,-y,-z + - x+1/2,-y+1/2,z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - x,-y,-z + - x+1/2,-y+1/2,z + - x+1/2,y,z+1/2 + - x+1,y+1/2,-z+1/2 + - x+1/2,-y,-z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: B 2 e b +- crystal_class: orthorhombic + hall: " C -2ac 2" + hermann_mauguin: C 2 e b + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - x,-y,-z + - x+1/2,-y,z+1/2 + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - x,-y,-z + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z + - x+1,-y+1/2,z+1/2 + universal_h_m: C 2 e b +- crystal_class: orthorhombic + hall: " C -2ac -2ac" + hermann_mauguin: C c 2 e + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y,-z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y,-z + - x+1/2,y+1/2,z + - x+1,y+1/2,-z+1/2 + - -x+1,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z + universal_h_m: C c 2 e +- crystal_class: orthorhombic + hall: " A -2ab -2ab" + hermann_mauguin: A e 2 a + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x,y,-z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x,y,-z + - x,y+1/2,z+1/2 + - x+1/2,y+1,-z+1/2 + - -x+1/2,y+1,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: A e 2 a +- crystal_class: orthorhombic + hall: " F 2 -2" + hermann_mauguin: F m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: F m m 2 +- crystal_class: orthorhombic + hall: " F -2 2" + hermann_mauguin: F 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + - x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + - x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z + universal_h_m: F 2 m m +- crystal_class: orthorhombic + hall: " F -2 -2" + hermann_mauguin: F m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + universal_h_m: F m 2 m +- crystal_class: orthorhombic + hall: " F 2 -2d" + hermann_mauguin: F d d 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/4,y+1/4,z+1/4 + - x+3/4,-y+3/4,z+1/4 + number: 43 + schoenflies: C2v^19 + symops: + - x,y,z + - -x,-y,z + - -x+1/4,y+1/4,z+1/4 + - x+3/4,-y+3/4,z+1/4 + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x+1/4,y+3/4,z+3/4 + - x+3/4,-y+5/4,z+3/4 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+3/4,y+1/4,z+3/4 + - x+5/4,-y+3/4,z+3/4 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+3/4,y+3/4,z+1/4 + - x+5/4,-y+5/4,z+1/4 + universal_h_m: F d d 2 +- crystal_class: orthorhombic + hall: " F -2d 2" + hermann_mauguin: F 2 d d + ncsym: + - x,y,z + - x+1/4,y+1/4,-z+1/4 + - x,-y,-z + - x+1/4,-y+1/4,z+1/4 + number: 43 + schoenflies: C2v^19 + symops: + - x,y,z + - x+1/4,y+1/4,-z+1/4 + - x,-y,-z + - x+1/4,-y+1/4,z+1/4 + - x,y+1/2,z+1/2 + - x+1/4,y+3/4,-z+3/4 + - x,-y+1/2,-z+1/2 + - x+1/4,-y+3/4,z+3/4 + - x+1/2,y,z+1/2 + - x+3/4,y+1/4,-z+3/4 + - x+1/2,-y,-z+1/2 + - x+3/4,-y+1/4,z+3/4 + - x+1/2,y+1/2,z + - x+3/4,y+3/4,-z+1/4 + - x+1/2,-y+1/2,-z + - x+3/4,-y+3/4,z+1/4 + universal_h_m: F 2 d d +- crystal_class: orthorhombic + hall: " F -2d -2d" + hermann_mauguin: F d 2 d + ncsym: + - x,y,z + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - -x+1/2,y+1/2,-z + number: 43 + schoenflies: C2v^19 + symops: + - x,y,z + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - -x+1/2,y+1/2,-z + - x,y+1/2,z+1/2 + - x+1/4,y+3/4,-z+3/4 + - -x+1/4,y+3/4,z+3/4 + - -x+1/2,y+1,-z+1/2 + - x+1/2,y,z+1/2 + - x+3/4,y+1/4,-z+3/4 + - -x+3/4,y+1/4,z+3/4 + - -x+1,y+1/2,-z+1/2 + - x+1/2,y+1/2,z + - x+3/4,y+3/4,-z+1/4 + - -x+3/4,y+3/4,z+1/4 + - -x+1,y+1,-z + universal_h_m: F d 2 d +- crystal_class: orthorhombic + hall: " I 2 -2" + hermann_mauguin: I m m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - -x,-y,z + - -x,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m 2 +- crystal_class: orthorhombic + hall: " I -2 2" + hermann_mauguin: I 2 m m + ncsym: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - x,y,-z + - x,-y,-z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I 2 m m +- crystal_class: orthorhombic + hall: " I -2 -2" + hermann_mauguin: I m 2 m + ncsym: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - x,y,-z + - -x,y,z + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I m 2 m +- crystal_class: orthorhombic + hall: " I 2 -2c" + hermann_mauguin: I b a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + number: 45 + schoenflies: C2v^21 + symops: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1 + - x+1/2,-y+1/2,z+1 + universal_h_m: I b a 2 +- crystal_class: orthorhombic + hall: " I -2a 2" + hermann_mauguin: I 2 c b + ncsym: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + number: 45 + schoenflies: C2v^21 + symops: + - x,y,z + - x+1/2,y,-z + - x,-y,-z + - x+1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - x+1,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: I 2 c b +- crystal_class: orthorhombic + hall: " I -2b -2b" + hermann_mauguin: I c 2 a + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + number: 45 + schoenflies: C2v^21 + symops: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1,-z+1/2 + - -x+1/2,y+1,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I c 2 a +- crystal_class: orthorhombic + hall: " I 2 -2a" + hermann_mauguin: I m a 2 + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1,y+1/2,z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: I m a 2 +- crystal_class: orthorhombic + hall: " I 2 -2b" + hermann_mauguin: I b m 2 + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x,-y,z + - -x,y+1/2,z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1,z+1/2 + - x+1/2,-y+1,z+1/2 + universal_h_m: I b m 2 +- crystal_class: orthorhombic + hall: " I -2b 2" + hermann_mauguin: I 2 m b + ncsym: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - x,y+1/2,-z + - x,-y,-z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1,z+1/2 + universal_h_m: I 2 m b +- crystal_class: orthorhombic + hall: " I -2c 2" + hermann_mauguin: I 2 c m + ncsym: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - x,y,-z+1/2 + - x,-y,-z + - x,-y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1 + - x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1 + universal_h_m: I 2 c m +- crystal_class: orthorhombic + hall: " I -2c -2c" + hermann_mauguin: I c 2 m + ncsym: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1 + - -x+1/2,y+1/2,z+1 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I c 2 m +- crystal_class: orthorhombic + hall: " I -2a -2a" + hermann_mauguin: I m 2 a + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y,z + - -x,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1,y+1/2,-z+1/2 + - -x+1,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: I m 2 a +- crystal_class: orthorhombic + hall: -P 2 2 + hermann_mauguin: P m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 47 + schoenflies: D2h^1 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + universal_h_m: P m m m +- crystal_class: orthorhombic + hall: " P 2 2 -1n" + hermann_mauguin: P n n n + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 48 + schoenflies: D2h^2 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P n n n :1 +- crystal_class: orthorhombic + hall: -P 2ab 2bc + hermann_mauguin: P n n n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + number: 48 + schoenflies: D2h^2 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + universal_h_m: P n n n :2 +- crystal_class: orthorhombic + hall: -P 2 2c + hermann_mauguin: P c c m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + number: 49 + schoenflies: D2h^3 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + universal_h_m: P c c m +- crystal_class: orthorhombic + hall: -P 2a 2 + hermann_mauguin: P m a a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + number: 49 + schoenflies: D2h^3 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + universal_h_m: P m a a +- crystal_class: orthorhombic + hall: -P 2b 2b + hermann_mauguin: P b m b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + number: 49 + schoenflies: D2h^3 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + universal_h_m: P b m b +- crystal_class: orthorhombic + hall: " P 2 2 -1ab" + hermann_mauguin: P b a n + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: P b a n :1 +- crystal_class: orthorhombic + hall: -P 2ab 2b + hermann_mauguin: P b a n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + universal_h_m: P b a n :2 +- crystal_class: orthorhombic + hall: " P 2 2 -1bc" + hermann_mauguin: P n c b + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: P n c b :1 +- crystal_class: orthorhombic + hall: -P 2b 2bc + hermann_mauguin: P n c b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z-1/2 + - x,-y,z-1/2 + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z-1/2 + - x,-y,z-1/2 + universal_h_m: P n c b :2 +- crystal_class: orthorhombic + hall: " P 2 2 -1ac" + hermann_mauguin: P c n a + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P c n a :1 +- crystal_class: orthorhombic + hall: -P 2a 2c + hermann_mauguin: P c n a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z-1/2 + - x-1/2,-y,z-1/2 + number: 50 + schoenflies: D2h^4 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z-1/2 + - x-1/2,-y,z-1/2 + universal_h_m: P c n a :2 +- crystal_class: orthorhombic + hall: -P 2a 2a + hermann_mauguin: P m m a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + universal_h_m: P m m a +- crystal_class: orthorhombic + hall: -P 2b 2 + hermann_mauguin: P m m b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + universal_h_m: P m m b +- crystal_class: orthorhombic + hall: -P 2 2b + hermann_mauguin: P b m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + universal_h_m: P b m m +- crystal_class: orthorhombic + hall: -P 2c 2c + hermann_mauguin: P c m m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + universal_h_m: P c m m +- crystal_class: orthorhombic + hall: -P 2c 2 + hermann_mauguin: P m c m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + universal_h_m: P m c m +- crystal_class: orthorhombic + hall: -P 2 2a + hermann_mauguin: P m a m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + universal_h_m: P m a m +- crystal_class: orthorhombic + hall: -P 2a 2bc + hermann_mauguin: P n n a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P n n a +- crystal_class: orthorhombic + hall: -P 2b 2n + hermann_mauguin: P n n b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + universal_h_m: P n n b +- crystal_class: orthorhombic + hall: -P 2n 2b + hermann_mauguin: P b n n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y-1/2,z + - x-1/2,-y,z-1/2 + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y-1/2,z + - x-1/2,-y,z-1/2 + universal_h_m: P b n n +- crystal_class: orthorhombic + hall: -P 2ab 2c + hermann_mauguin: P c n n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z-1/2 + - x-1/2,-y-1/2,z-1/2 + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z-1/2 + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P c n n +- crystal_class: orthorhombic + hall: -P 2ab 2n + hermann_mauguin: P n c n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z-1/2 + - x,-y,z-1/2 + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z-1/2 + - x,-y,z-1/2 + universal_h_m: P n c n +- crystal_class: orthorhombic + hall: -P 2n 2bc + hermann_mauguin: P n a n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - x-1/2,-y,z + number: 52 + schoenflies: D2h^6 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - x-1/2,-y,z + universal_h_m: P n a n +- crystal_class: orthorhombic + hall: -P 2ac 2 + hermann_mauguin: P m n a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z + - x-1/2,-y,z-1/2 + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z + - x-1/2,-y,z-1/2 + universal_h_m: P m n a +- crystal_class: orthorhombic + hall: -P 2bc 2bc + hermann_mauguin: P n m b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - x,-y,z + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - x,-y,z + universal_h_m: P n m b +- crystal_class: orthorhombic + hall: -P 2ab 2ab + hermann_mauguin: P b m n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z + - x,-y,z + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z + - x,-y,z + universal_h_m: P b m n +- crystal_class: orthorhombic + hall: -P 2 2ac + hermann_mauguin: P c n m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z-1/2 + - x-1/2,-y,z-1/2 + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z-1/2 + - x-1/2,-y,z-1/2 + universal_h_m: P c n m +- crystal_class: orthorhombic + hall: -P 2 2bc + hermann_mauguin: P n c m + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z-1/2 + - x,-y-1/2,z-1/2 + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z-1/2 + - x,-y-1/2,z-1/2 + universal_h_m: P n c m +- crystal_class: orthorhombic + hall: -P 2ab 2 + hermann_mauguin: P m a n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z + - x-1/2,-y-1/2,z + number: 53 + schoenflies: D2h^7 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z + - x-1/2,-y-1/2,z + universal_h_m: P m a n +- crystal_class: orthorhombic + hall: -P 2a 2ac + hermann_mauguin: P c c a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z-1/2 + - x,-y,z-1/2 + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z-1/2 + - x,-y,z-1/2 + universal_h_m: P c c a +- crystal_class: orthorhombic + hall: -P 2b 2c + hermann_mauguin: P c c b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + universal_h_m: P c c b +- crystal_class: orthorhombic + hall: -P 2a 2b + hermann_mauguin: P b a a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + universal_h_m: P b a a +- crystal_class: orthorhombic + hall: -P 2ac 2c + hermann_mauguin: P c a a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z-1/2 + - x-1/2,-y,z + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z-1/2 + - x-1/2,-y,z + universal_h_m: P c a a +- crystal_class: orthorhombic + hall: -P 2bc 2b + hermann_mauguin: P b c b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y-1/2,z + - x,-y,z-1/2 + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y-1/2,z + - x,-y,z-1/2 + universal_h_m: P b c b +- crystal_class: orthorhombic + hall: -P 2b 2ab + hermann_mauguin: P b a b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z + - x-1/2,-y,z + number: 54 + schoenflies: D2h^8 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z + - x-1/2,-y,z + universal_h_m: P b a b +- crystal_class: orthorhombic + hall: -P 2 2ab + hermann_mauguin: P b a m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + number: 55 + schoenflies: D2h^9 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + universal_h_m: P b a m +- crystal_class: orthorhombic + hall: -P 2bc 2 + hermann_mauguin: P m c b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y,z + - x,-y-1/2,z-1/2 + number: 55 + schoenflies: D2h^9 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y,z + - x,-y-1/2,z-1/2 + universal_h_m: P m c b +- crystal_class: orthorhombic + hall: -P 2ac 2ac + hermann_mauguin: P c m a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y,z + number: 55 + schoenflies: D2h^9 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y,z + universal_h_m: P c m a +- crystal_class: orthorhombic + hall: -P 2ab 2ac + hermann_mauguin: P c c n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y,z-1/2 + - x,-y-1/2,z-1/2 + number: 56 + schoenflies: D2h^10 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y,z-1/2 + - x,-y-1/2,z-1/2 + universal_h_m: P c c n +- crystal_class: orthorhombic + hall: -P 2ac 2bc + hermann_mauguin: P n a a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y-1/2,z-1/2 + - x-1/2,-y-1/2,z + number: 56 + schoenflies: D2h^10 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y-1/2,z-1/2 + - x-1/2,-y-1/2,z + universal_h_m: P n a a +- crystal_class: orthorhombic + hall: -P 2bc 2ab + hermann_mauguin: P b n b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z + - x-1/2,-y,z-1/2 + number: 56 + schoenflies: D2h^10 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z + - x-1/2,-y,z-1/2 + universal_h_m: P b n b +- crystal_class: orthorhombic + hall: -P 2c 2b + hermann_mauguin: P b c m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y-1/2,z + - x,-y-1/2,z-1/2 + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y-1/2,z + - x,-y-1/2,z-1/2 + universal_h_m: P b c m +- crystal_class: orthorhombic + hall: -P 2c 2ac + hermann_mauguin: P c a m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x-1/2,-y,z + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x-1/2,-y,z + universal_h_m: P c a m +- crystal_class: orthorhombic + hall: -P 2ac 2a + hermann_mauguin: P m c a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z + - x,-y,z-1/2 + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z + - x,-y,z-1/2 + universal_h_m: P m c a +- crystal_class: orthorhombic + hall: -P 2b 2a + hermann_mauguin: P m a b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y,z + - x-1/2,-y-1/2,z + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y,z + - x-1/2,-y-1/2,z + universal_h_m: P m a b +- crystal_class: orthorhombic + hall: -P 2a 2ab + hermann_mauguin: P b m a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y-1/2,z + - x,-y-1/2,z + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y-1/2,z + - x,-y-1/2,z + universal_h_m: P b m a +- crystal_class: orthorhombic + hall: -P 2bc 2c + hermann_mauguin: P c m b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y,z-1/2 + - x,-y-1/2,z + number: 57 + schoenflies: D2h^11 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x,y,z-1/2 + - x,-y-1/2,z + universal_h_m: P c m b +- crystal_class: orthorhombic + hall: -P 2 2n + hermann_mauguin: P n n m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + number: 58 + schoenflies: D2h^12 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P n n m +- crystal_class: orthorhombic + hall: -P 2n 2 + hermann_mauguin: P m n n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y,z + - x-1/2,-y-1/2,z-1/2 + number: 58 + schoenflies: D2h^12 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y,z + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P m n n +- crystal_class: orthorhombic + hall: -P 2n 2n + hermann_mauguin: P n m n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x,-y,z + number: 58 + schoenflies: D2h^12 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x,-y,z + universal_h_m: P n m n +- crystal_class: orthorhombic + hall: " P 2 2ab -1ab" + hermann_mauguin: P m m n + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y,z + - x,-y,z + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y,z + - x,-y,z + universal_h_m: P m m n :1 +- crystal_class: orthorhombic + hall: -P 2ab 2a + hermann_mauguin: P m m n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y,z + - x,-y-1/2,z + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y,z + - x,-y-1/2,z + universal_h_m: P m m n :2 +- crystal_class: orthorhombic + hall: " P 2bc 2 -1bc" + hermann_mauguin: P n m m + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y+1/2,z+1/2 + - x,-y,z + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y+1/2,z+1/2 + - x,-y,z + universal_h_m: P n m m :1 +- crystal_class: orthorhombic + hall: -P 2c 2bc + hermann_mauguin: P n m m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y-1/2,z-1/2 + - x,-y-1/2,z + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y-1/2,z-1/2 + - x,-y-1/2,z + universal_h_m: P n m m :2 +- crystal_class: orthorhombic + hall: " P 2ac 2ac -1ac" + hermann_mauguin: P m n m + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - -x,y,z + - x+1/2,-y,z+1/2 + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - -x,y,z + - x+1/2,-y,z+1/2 + universal_h_m: P m n m :1 +- crystal_class: orthorhombic + hall: -P 2c 2a + hermann_mauguin: P m n m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y,z + - x-1/2,-y,z-1/2 + number: 59 + schoenflies: D2h^13 + symops: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y,z + - x-1/2,-y,z-1/2 + universal_h_m: P m n m :2 +- crystal_class: orthorhombic + hall: -P 2n 2ab + hermann_mauguin: P b c n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y,z-1/2 + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y,z-1/2 + universal_h_m: P b c n +- crystal_class: orthorhombic + hall: -P 2n 2c + hermann_mauguin: P c a n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y,z-1/2 + - x-1/2,-y-1/2,z + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x,y,z-1/2 + - x-1/2,-y-1/2,z + universal_h_m: P c a n +- crystal_class: orthorhombic + hall: -P 2a 2n + hermann_mauguin: P n c a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y-1/2,z-1/2 + - x,-y-1/2,z-1/2 + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y-1/2,z-1/2 + - x,-y-1/2,z-1/2 + universal_h_m: P n c a +- crystal_class: orthorhombic + hall: -P 2bc 2n + hermann_mauguin: P n a b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y,z + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y,z + universal_h_m: P n a b +- crystal_class: orthorhombic + hall: -P 2ac 2b + hermann_mauguin: P b n a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y-1/2,z + - x-1/2,-y-1/2,z-1/2 + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y-1/2,z + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P b n a +- crystal_class: orthorhombic + hall: -P 2b 2ac + hermann_mauguin: P c n b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y,z-1/2 + - x-1/2,-y-1/2,z-1/2 + number: 60 + schoenflies: D2h^14 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y,z-1/2 + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P c n b +- crystal_class: orthorhombic + hall: -P 2ac 2ab + hermann_mauguin: P b c a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y-1/2,z-1/2 + number: 61 + schoenflies: D2h^15 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y-1/2,z-1/2 + universal_h_m: P b c a +- crystal_class: orthorhombic + hall: -P 2bc 2ac + hermann_mauguin: P c a b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - x-1/2,-y-1/2,z + number: 61 + schoenflies: D2h^15 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - x-1/2,-y-1/2,z + universal_h_m: P c a b +- crystal_class: orthorhombic + hall: -P 2ac 2n + hermann_mauguin: P n m a + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x,-y-1/2,z + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x,-y-1/2,z + universal_h_m: P n m a +- crystal_class: orthorhombic + hall: -P 2bc 2a + hermann_mauguin: P m n b + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y,z + - x-1/2,-y-1/2,z-1/2 + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z-1/2 + - -x-1/2,y,z + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P m n b +- crystal_class: orthorhombic + hall: -P 2c 2ab + hermann_mauguin: P b n m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z-1/2 + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z-1/2 + universal_h_m: P b n m +- crystal_class: orthorhombic + hall: -P 2n 2ac + hermann_mauguin: P c m n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y-1/2,z + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y-1/2,z + universal_h_m: P c m n +- crystal_class: orthorhombic + hall: -P 2n 2a + hermann_mauguin: P m c n + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y,z + - x,-y-1/2,z-1/2 + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x-1/2,y-1/2,-z-1/2 + - -x-1/2,y,z + - x,-y-1/2,z-1/2 + universal_h_m: P m c n +- crystal_class: orthorhombic + hall: -P 2c 2n + hermann_mauguin: P n a m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y-1/2,z + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - x-1/2,-y-1/2,z + universal_h_m: P n a m +- crystal_class: orthorhombic + hall: -C 2c 2 + hermann_mauguin: C m c m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z-1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z-1/2 + universal_h_m: C m c m +- crystal_class: orthorhombic + hall: -C 2c 2c + hermann_mauguin: C c m m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z-1/2 + - -x+1/2,y+1/2,z-1/2 + - x+1/2,-y+1/2,z + universal_h_m: C c m m +- crystal_class: orthorhombic + hall: -A 2a 2a + hermann_mauguin: A m m a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y+1/2,-z+1/2 + - -x-1/2,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A m m a +- crystal_class: orthorhombic + hall: -A 2 2a + hermann_mauguin: A m a m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x-1/2,y+1/2,z+1/2 + - x-1/2,-y+1/2,z+1/2 + universal_h_m: A m a m +- crystal_class: orthorhombic + hall: -B 2 2b + hermann_mauguin: B b m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y-1/2,z+1/2 + - x+1/2,-y-1/2,z+1/2 + universal_h_m: B b m m +- crystal_class: orthorhombic + hall: -B 2b 2 + hermann_mauguin: B m m b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y-1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y-1/2,z+1/2 + universal_h_m: B m m b +- crystal_class: orthorhombic + hall: -C 2ac 2 + hermann_mauguin: C m c e + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z + - x-1/2,-y,z-1/2 + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x,y,z + - x-1/2,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z-1/2 + - -x+1/2,y+1/2,z + - x,-y+1/2,z-1/2 + universal_h_m: C m c e +- crystal_class: orthorhombic + hall: -C 2ac 2ac + hermann_mauguin: C c m e + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y,z-1/2 + - x,-y,z + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z-1/2 + - -x,y+1/2,z-1/2 + - x+1/2,-y+1/2,z + universal_h_m: C c m e +- crystal_class: orthorhombic + hall: -A 2ab 2ab + hermann_mauguin: A e m a + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z + - x,-y,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x-1/2,y-1/2,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y,-z+1/2 + - -x-1/2,y,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A e m a +- crystal_class: orthorhombic + hall: -A 2 2ab + hermann_mauguin: A e a m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x+1/2,y+1,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x-1/2,y,z+1/2 + - x-1/2,-y,z+1/2 + universal_h_m: A e a m +- crystal_class: orthorhombic + hall: -B 2 2ab + hermann_mauguin: B b e m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y-1/2,z + - x-1/2,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x,y-1/2,z+1/2 + - x,-y-1/2,z+1/2 + universal_h_m: B b e m +- crystal_class: orthorhombic + hall: -B 2ab 2 + hermann_mauguin: B m e b + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z + - x-1/2,-y-1/2,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y,z + - x-1/2,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y-1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - x,-y-1/2,z+1/2 + universal_h_m: B m e b +- crystal_class: orthorhombic + hall: -C 2 2 + hermann_mauguin: C m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: C m m m +- crystal_class: orthorhombic + hall: -A 2 2 + hermann_mauguin: A m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A m m m +- crystal_class: orthorhombic + hall: -B 2 2 + hermann_mauguin: B m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: B m m m +- crystal_class: orthorhombic + hall: -C 2 2c + hermann_mauguin: C c c m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z-1/2 + - x+1/2,-y+1/2,z-1/2 + universal_h_m: C c c m +- crystal_class: orthorhombic + hall: -A 2a 2 + hermann_mauguin: A m a a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x-1/2,-y+1/2,z+1/2 + universal_h_m: A m a a +- crystal_class: orthorhombic + hall: -B 2b 2b + hermann_mauguin: B b m b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y-1/2,-z+1/2 + - -x+1/2,y-1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: B b m b +- crystal_class: orthorhombic + hall: -C 2a 2 + hermann_mauguin: C m m a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z + - x,-y+1/2,z + universal_h_m: C m m a +- crystal_class: orthorhombic + hall: -C 2a 2a + hermann_mauguin: C m m b + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z + - x+1,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: C m m b +- crystal_class: orthorhombic + hall: -A 2b 2b + hermann_mauguin: A b m m + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1,z+1/2 + - x,-y+1,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x,y,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A b m m +- crystal_class: orthorhombic + hall: -A 2 2b + hermann_mauguin: A c m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1,-z+1/2 + - -x,y+1,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - x,-y,z+1/2 + universal_h_m: A c m m +- crystal_class: orthorhombic + hall: -B 2 2a + hermann_mauguin: B m c m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1,-y,-z+1/2 + - -x+1,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x,y,z+1/2 + - x,-y,z+1/2 + universal_h_m: B m c m +- crystal_class: orthorhombic + hall: -B 2a 2 + hermann_mauguin: B m a m + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + number: 67 + schoenflies: D2h^21 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + - x+1/2,y,z+1/2 + - -x+1,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x,-y,z+1/2 + universal_h_m: B m a m +- crystal_class: orthorhombic + hall: " C 2 2 -1ac" + hermann_mauguin: C c c e + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1,-y+1/2,-z+1/2 + - x+1,y+1/2,-z+1/2 + - -x+1,y+1/2,z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: C c c e :1 +- crystal_class: orthorhombic + hall: -C 2a 2ac + hermann_mauguin: C c c a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z-1/2 + - x,-y,z-1/2 + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z-1/2 + - x,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z + - x+1,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + - -x,y+1/2,z-1/2 + - x+1/2,-y+1/2,z-1/2 + universal_h_m: C c c a :2 +- crystal_class: orthorhombic + hall: -C 2a 2c + hermann_mauguin: C c c b + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z-1/2 + - x-1/2,-y,z-1/2 + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z-1/2 + - x-1/2,-y,z-1/2 + - x+1/2,y+1/2,z + - -x+1,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z-1/2 + - x,-y+1/2,z-1/2 + universal_h_m: C c c b :2 +- crystal_class: orthorhombic + hall: " A 2 2 -1ab" + hermann_mauguin: A e a a + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x+1/2,-y+1,-z+1/2 + - x+1/2,y+1,-z+1/2 + - -x+1/2,y+1,z+1/2 + - x+1/2,-y+1,z+1/2 + universal_h_m: A e a a :1 +- crystal_class: orthorhombic + hall: -A 2a 2b + hermann_mauguin: A b a a + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1,-z+1/2 + - -x+1/2,y+1,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y+1/2,-z+1/2 + - -x,y,z+1/2 + - x-1/2,-y,z+1/2 + universal_h_m: A b a a :2 +- crystal_class: orthorhombic + hall: -A 2ab 2b + hermann_mauguin: A c a a + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x,-y+1,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/2,y,-z+1/2 + - -x,y,z+1/2 + - x-1/2,-y+1/2,z+1/2 + universal_h_m: A c a a :2 +- crystal_class: orthorhombic + hall: " B 2 2 -1ab" + hermann_mauguin: B b e b + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1,-y+1/2,-z+1/2 + - x+1,y+1/2,-z+1/2 + - -x+1,y+1/2,z+1/2 + - x+1,-y+1/2,z+1/2 + universal_h_m: B b e b :1 +- crystal_class: orthorhombic + hall: -B 2ab 2b + hermann_mauguin: B b c b + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z + - x-1/2,-y,z + - x+1/2,y,z+1/2 + - -x+1,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y-1/2,-z+1/2 + - -x+1/2,y-1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: B b c b :2 +- crystal_class: orthorhombic + hall: -B 2b 2ab + hermann_mauguin: B b a b + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z + - x-1/2,-y,z + number: 68 + schoenflies: D2h^22 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x-1/2,y-1/2,z + - x-1/2,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y-1/2,-z+1/2 + - -x,y-1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: B b a b :2 +- crystal_class: orthorhombic + hall: -F 2 2 + hermann_mauguin: F m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 69 + schoenflies: D2h^23 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: F m m m +- crystal_class: orthorhombic + hall: " F 2 2 -1d" + hermann_mauguin: F d d d + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/4,-y+1/4,-z+1/4 + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - x+1/4,-y+1/4,z+1/4 + number: 70 + schoenflies: D2h^24 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/4,-y+1/4,-z+1/4 + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - x+1/4,-y+1/4,z+1/4 + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x+1/4,-y+3/4,-z+3/4 + - x+1/4,y+3/4,-z+3/4 + - -x+1/4,y+3/4,z+3/4 + - x+1/4,-y+3/4,z+3/4 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+3/4,-y+1/4,-z+3/4 + - x+3/4,y+1/4,-z+3/4 + - -x+3/4,y+1/4,z+3/4 + - x+3/4,-y+1/4,z+3/4 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+3/4,-y+3/4,-z+1/4 + - x+3/4,y+3/4,-z+1/4 + - -x+3/4,y+3/4,z+1/4 + - x+3/4,-y+3/4,z+1/4 + universal_h_m: F d d d :1 +- crystal_class: orthorhombic + hall: -F 2uv 2vw + hermann_mauguin: F d d d + ncsym: + - x,y,z + - -x+1/4,-y+1/4,z + - x,-y+1/4,-z+1/4 + - -x+1/4,y,-z+1/4 + - -x,-y,-z + - x-1/4,y-1/4,-z + - -x,y-1/4,z-1/4 + - x-1/4,-y,z-1/4 + number: 70 + schoenflies: D2h^24 + symops: + - x,y,z + - -x+1/4,-y+1/4,z + - x,-y+1/4,-z+1/4 + - -x+1/4,y,-z+1/4 + - -x,-y,-z + - x-1/4,y-1/4,-z + - -x,y-1/4,z-1/4 + - x-1/4,-y,z-1/4 + - x,y+1/2,z+1/2 + - -x+1/4,-y+3/4,z+1/2 + - x,-y+3/4,-z+3/4 + - -x+1/4,y+1/2,-z+3/4 + - -x,-y+1/2,-z+1/2 + - x-1/4,y+1/4,-z+1/2 + - -x,y+1/4,z+1/4 + - x-1/4,-y+1/2,z+1/4 + - x+1/2,y,z+1/2 + - -x+3/4,-y+1/4,z+1/2 + - x+1/2,-y+1/4,-z+3/4 + - -x+3/4,y,-z+3/4 + - -x+1/2,-y,-z+1/2 + - x+1/4,y-1/4,-z+1/2 + - -x+1/2,y-1/4,z+1/4 + - x+1/4,-y,z+1/4 + - x+1/2,y+1/2,z + - -x+3/4,-y+3/4,z + - x+1/2,-y+3/4,-z+1/4 + - -x+3/4,y+1/2,-z+1/4 + - -x+1/2,-y+1/2,-z + - x+1/4,y+1/4,-z + - -x+1/2,y+1/4,z-1/4 + - x+1/4,-y+1/2,z-1/4 + universal_h_m: F d d d :2 +- crystal_class: orthorhombic + hall: -I 2 2 + hermann_mauguin: I m m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + number: 71 + schoenflies: D2h^25 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m m +- crystal_class: orthorhombic + hall: -I 2 2c + hermann_mauguin: I b a m + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z-1/2 + - x,-y,z-1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1/2,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: I b a m +- crystal_class: orthorhombic + hall: -I 2a 2 + hermann_mauguin: I m c b + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y,z + - x-1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: I m c b +- crystal_class: orthorhombic + hall: -I 2b 2b + hermann_mauguin: I c m a + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y-1/2,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I c m a +- crystal_class: orthorhombic + hall: -I 2b 2c + hermann_mauguin: I b c a + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + number: 73 + schoenflies: D2h^27 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y,z + universal_h_m: I b c a +- crystal_class: orthorhombic + hall: -I 2a 2b + hermann_mauguin: I c a b + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + number: 73 + schoenflies: D2h^27 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x-1/2,y,-z + - -x,y-1/2,z + - x-1/2,-y-1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1,-y+1/2,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x+1,y+1,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - x,-y,z+1/2 + universal_h_m: I c a b +- crystal_class: orthorhombic + hall: -I 2b 2 + hermann_mauguin: I m m a + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z + - x,-y-1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: I m m a +- crystal_class: orthorhombic + hall: -I 2a 2a + hermann_mauguin: I m m b + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x-1/2,y,-z + - -x-1/2,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1,-y+1/2,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m b +- crystal_class: orthorhombic + hall: -I 2c 2c + hermann_mauguin: I b m m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z+1/2 + - -x,y,-z + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z-1/2 + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I b m m +- crystal_class: orthorhombic + hall: -I 2 2b + hermann_mauguin: I c m m + ncsym: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x,-y,z + - x,-y+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y,-z + - -x,y-1/2,z + - x,-y-1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1,-z+1/2 + - -x+1/2,y+1,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: I c m m +- crystal_class: orthorhombic + hall: -I 2 2a + hermann_mauguin: I m c m + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x,-y,z + - x+1/2,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y,-z + - -x-1/2,y,z + - x-1/2,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1,-y+1/2,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: I m c m +- crystal_class: orthorhombic + hall: -I 2c 2 + hermann_mauguin: I m a m + ncsym: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + number: 74 + schoenflies: D2h^28 + symops: + - x,y,z + - -x,-y,z+1/2 + - x,-y,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z-1/2 + - -x,y,z + - x,-y,z-1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: I m a m +- crystal_class: tetragonal + hall: " P 4" + hermann_mauguin: P 4 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + number: 75 + schoenflies: C4^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + universal_h_m: P 4 +- crystal_class: tetragonal + hall: " P 4w" + hermann_mauguin: P 41 + ncsym: + - x,y,z + - -y,x,z+1/4 + - -x,-y,z+1/2 + - y,-x,z+3/4 + number: 76 + schoenflies: C4^2 + symops: + - x,y,z + - -y,x,z+1/4 + - -x,-y,z+1/2 + - y,-x,z+3/4 + universal_h_m: P 41 +- crystal_class: tetragonal + hall: " P 4c" + hermann_mauguin: P 42 + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + number: 77 + schoenflies: C4^3 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + universal_h_m: P 42 +- crystal_class: tetragonal + hall: " P 4cw" + hermann_mauguin: P 43 + ncsym: + - x,y,z + - -y,x,z+3/4 + - -x,-y,z+1/2 + - y,-x,z+1/4 + number: 78 + schoenflies: C4^4 + symops: + - x,y,z + - -y,x,z+3/4 + - -x,-y,z+1/2 + - y,-x,z+1/4 + universal_h_m: P 43 +- crystal_class: tetragonal + hall: " I 4" + hermann_mauguin: I 4 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + number: 79 + schoenflies: C4^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + universal_h_m: I 4 +- crystal_class: tetragonal + hall: " I 4bw" + hermann_mauguin: I 41 + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + number: 80 + schoenflies: C4^6 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + universal_h_m: I 41 +- crystal_class: tetragonal + hall: " P -4" + hermann_mauguin: P -4 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + number: 81 + schoenflies: S4^1 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + universal_h_m: P -4 +- crystal_class: tetragonal + hall: " I -4" + hermann_mauguin: I -4 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + number: 82 + schoenflies: S4^2 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + universal_h_m: I -4 +- crystal_class: tetragonal + hall: -P 4 + hermann_mauguin: P 4/m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + number: 83 + schoenflies: C4h^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + universal_h_m: P 4/m +- crystal_class: tetragonal + hall: -P 4c + hermann_mauguin: P 42/m + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + number: 84 + schoenflies: C4h^2 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + universal_h_m: P 42/m +- crystal_class: tetragonal + hall: " P 4ab -1ab" + hermann_mauguin: P 4/n + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + number: 85 + schoenflies: C4h^3 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + universal_h_m: P 4/n :1 +- crystal_class: tetragonal + hall: -P 4a + hermann_mauguin: P 4/n + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + number: 85 + schoenflies: C4h^3 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + universal_h_m: P 4/n :2 +- crystal_class: tetragonal + hall: " P 4n -1n" + hermann_mauguin: P 42/n + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + number: 86 + schoenflies: C4h^4 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + universal_h_m: P 42/n :1 +- crystal_class: tetragonal + hall: -P 4bc + hermann_mauguin: P 42/n + ncsym: + - x,y,z + - -y,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x,z+1/2 + - -x,-y,-z + - y,-x-1/2,-z-1/2 + - x-1/2,y-1/2,-z + - -y-1/2,x,-z-1/2 + number: 86 + schoenflies: C4h^4 + symops: + - x,y,z + - -y,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x,z+1/2 + - -x,-y,-z + - y,-x-1/2,-z-1/2 + - x-1/2,y-1/2,-z + - -y-1/2,x,-z-1/2 + universal_h_m: P 42/n :2 +- crystal_class: tetragonal + hall: -I 4 + hermann_mauguin: I 4/m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + universal_h_m: I 4/m +- crystal_class: tetragonal + hall: " I 4bw -1bw" + hermann_mauguin: I 41/a + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + number: 88 + schoenflies: C4h^6 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - -x+1/2,-y+1,-z+3/4 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/4 + - -y,x+1,-z + universal_h_m: I 41/a :1 +- crystal_class: tetragonal + hall: -I 4ad + hermann_mauguin: I 41/a + ncsym: + - x,y,z + - -y+3/4,x+1/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+3/4,-x+3/4,z+3/4 + - -x,-y,-z + - y-3/4,-x-1/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-3/4,x-3/4,-z-3/4 + number: 88 + schoenflies: C4h^6 + symops: + - x,y,z + - -y+3/4,x+1/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+3/4,-x+3/4,z+3/4 + - -x,-y,-z + - y-3/4,-x-1/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-3/4,x-3/4,-z-3/4 + - x+1/2,y+1/2,z+1/2 + - -y+5/4,x+3/4,z+3/4 + - -x+1,-y+1/2,z+1 + - y+5/4,-x+5/4,z+5/4 + - -x+1/2,-y+1/2,-z+1/2 + - y-1/4,-x+1/4,-z+1/4 + - x,y+1/2,-z + - -y-1/4,x-1/4,-z-1/4 + universal_h_m: I 41/a :2 +- crystal_class: tetragonal + hall: " P 4 2" + hermann_mauguin: P 4 2 2 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + number: 89 + schoenflies: D4^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + universal_h_m: P 4 2 2 +- crystal_class: tetragonal + hall: " P 4ab 2ab" + hermann_mauguin: P 4 21 2 + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + number: 90 + schoenflies: D4^2 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + universal_h_m: P 4 21 2 +- crystal_class: tetragonal + hall: " P 4w 2c" + hermann_mauguin: P 41 2 2 + ncsym: + - x,y,z + - -y,x,z+1/4 + - -x,-y,z+1/2 + - y,-x,z+3/4 + - x,-y,-z+1/2 + - y,x,-z+3/4 + - -x,y,-z + - -y,-x,-z+1/4 + number: 91 + schoenflies: D4^3 + symops: + - x,y,z + - -y,x,z+1/4 + - -x,-y,z+1/2 + - y,-x,z+3/4 + - x,-y,-z+1/2 + - y,x,-z+3/4 + - -x,y,-z + - -y,-x,-z+1/4 + universal_h_m: P 41 2 2 +- crystal_class: tetragonal + hall: " P 4abw 2nw" + hermann_mauguin: P 41 21 2 + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/4 + - -x,-y,z+1/2 + - y+1/2,-x+1/2,z+3/4 + - x+1/2,-y+1/2,-z+3/4 + - y,x,-z + - -x+1/2,y+1/2,-z+1/4 + - -y,-x,-z+1/2 + number: 92 + schoenflies: D4^4 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/4 + - -x,-y,z+1/2 + - y+1/2,-x+1/2,z+3/4 + - x+1/2,-y+1/2,-z+3/4 + - y,x,-z + - -x+1/2,y+1/2,-z+1/4 + - -y,-x,-z+1/2 + universal_h_m: P 41 21 2 +- crystal_class: tetragonal + hall: " P 4c 2" + hermann_mauguin: P 42 2 2 + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + number: 93 + schoenflies: D4^5 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + universal_h_m: P 42 2 2 +- crystal_class: tetragonal + hall: " P 4n 2n" + hermann_mauguin: P 42 21 2 + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + number: 94 + schoenflies: D4^6 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + universal_h_m: P 42 21 2 +- crystal_class: tetragonal + hall: " P 4cw 2c" + hermann_mauguin: P 43 2 2 + ncsym: + - x,y,z + - -y,x,z+3/4 + - -x,-y,z+1/2 + - y,-x,z+1/4 + - x,-y,-z+1/2 + - y,x,-z+1/4 + - -x,y,-z + - -y,-x,-z+3/4 + number: 95 + schoenflies: D4^7 + symops: + - x,y,z + - -y,x,z+3/4 + - -x,-y,z+1/2 + - y,-x,z+1/4 + - x,-y,-z+1/2 + - y,x,-z+1/4 + - -x,y,-z + - -y,-x,-z+3/4 + universal_h_m: P 43 2 2 +- crystal_class: tetragonal + hall: " P 4nw 2abw" + hermann_mauguin: P 43 21 2 + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+3/4 + - -x,-y,z+1/2 + - y+1/2,-x+1/2,z+1/4 + - x+1/2,-y+1/2,-z+1/4 + - y,x,-z + - -x+1/2,y+1/2,-z+3/4 + - -y,-x,-z+1/2 + number: 96 + schoenflies: D4^8 + symops: + - x,y,z + - -y+1/2,x+1/2,z+3/4 + - -x,-y,z+1/2 + - y+1/2,-x+1/2,z+1/4 + - x+1/2,-y+1/2,-z+1/4 + - y,x,-z + - -x+1/2,y+1/2,-z+3/4 + - -y,-x,-z+1/2 + universal_h_m: P 43 21 2 +- crystal_class: tetragonal + hall: " I 4 2" + hermann_mauguin: I 4 2 2 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + number: 97 + schoenflies: D4^9 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + universal_h_m: I 4 2 2 +- crystal_class: tetragonal + hall: " I 4bw 2bw" + hermann_mauguin: I 41 2 2 + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x,-y+1/2,-z+1/4 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+3/4 + - -y,-x,-z + number: 98 + schoenflies: D4^10 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x,-y+1/2,-z+1/4 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+3/4 + - -y,-x,-z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - x+1/2,-y+1,-z+3/4 + - y+1,x+1,-z+1 + - -x+1,y+1/2,-z+5/4 + - -y+1/2,-x+1/2,-z+1/2 + universal_h_m: I 41 2 2 +- crystal_class: tetragonal + hall: " P 4 -2" + hermann_mauguin: P 4 m m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 99 + schoenflies: C4v^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + universal_h_m: P 4 m m +- crystal_class: tetragonal + hall: " P 4 -2ab" + hermann_mauguin: P 4 b m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + number: 100 + schoenflies: C4v^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + universal_h_m: P 4 b m +- crystal_class: tetragonal + hall: " P 4c -2c" + hermann_mauguin: P 42 c m + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - y,x,z + number: 101 + schoenflies: C4v^3 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - y,x,z + universal_h_m: P 42 c m +- crystal_class: tetragonal + hall: " P 4n -2n" + hermann_mauguin: P 42 n m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + number: 102 + schoenflies: C4v^4 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + universal_h_m: P 42 n m +- crystal_class: tetragonal + hall: " P 4 -2c" + hermann_mauguin: P 4 c c + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + number: 103 + schoenflies: C4v^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + universal_h_m: P 4 c c +- crystal_class: tetragonal + hall: " P 4 -2n" + hermann_mauguin: P 4 n c + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 104 + schoenflies: C4v^6 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: P 4 n c +- crystal_class: tetragonal + hall: " P 4c -2" + hermann_mauguin: P 42 m c + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - y,x,z+1/2 + number: 105 + schoenflies: C4v^7 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - y,x,z+1/2 + universal_h_m: P 42 m c +- crystal_class: tetragonal + hall: " P 4c -2ab" + hermann_mauguin: P 42 b c + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z+1/2 + number: 106 + schoenflies: C4v^8 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z+1/2 + universal_h_m: P 42 b c +- crystal_class: tetragonal + hall: " I 4 -2" + hermann_mauguin: I 4 m m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 107 + schoenflies: C4v^9 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: I 4 m m +- crystal_class: tetragonal + hall: " I 4 -2c" + hermann_mauguin: I 4 c m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + number: 108 + schoenflies: C4v^10 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1 + - -y+1/2,-x+1/2,z+1 + - x+1/2,-y+1/2,z+1 + - y+1/2,x+1/2,z+1 + universal_h_m: I 4 c m +- crystal_class: tetragonal + hall: " I 4bw -2" + hermann_mauguin: I 41 m d + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,y,z + - -y,-x+1/2,z+1/4 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x,z+3/4 + number: 109 + schoenflies: C4v^11 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,y,z + - -y,-x+1/2,z+1/4 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x,z+3/4 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1,z+3/4 + - x+1,-y+1,z+1 + - y+1,x+1/2,z+5/4 + universal_h_m: I 41 m d +- crystal_class: tetragonal + hall: " I 4bw -2c" + hermann_mauguin: I 41 c d + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,y,z+1/2 + - -y,-x+1/2,z+3/4 + - x+1/2,-y+1/2,z + - y+1/2,x,z+1/4 + number: 110 + schoenflies: C4v^12 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - -x,y,z+1/2 + - -y,-x+1/2,z+3/4 + - x+1/2,-y+1/2,z + - y+1/2,x,z+1/4 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - -x+1/2,y+1/2,z+1 + - -y+1/2,-x+1,z+5/4 + - x+1,-y+1,z+1/2 + - y+1,x+1/2,z+3/4 + universal_h_m: I 41 c d +- crystal_class: tetragonal + hall: " P -4 2" + hermann_mauguin: P -4 2 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + number: 111 + schoenflies: D2d^1 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + universal_h_m: P -4 2 m +- crystal_class: tetragonal + hall: " P -4 2c" + hermann_mauguin: P -4 2 c + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z+1/2 + - -y,-x,z+1/2 + - -x,y,-z+1/2 + - y,x,z+1/2 + number: 112 + schoenflies: D2d^2 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z+1/2 + - -y,-x,z+1/2 + - -x,y,-z+1/2 + - y,x,z+1/2 + universal_h_m: P -4 2 c +- crystal_class: tetragonal + hall: " P -4 2ab" + hermann_mauguin: P -4 21 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x+1/2,-y+1/2,-z + - -y+1/2,-x+1/2,z + - -x+1/2,y+1/2,-z + - y+1/2,x+1/2,z + number: 113 + schoenflies: D2d^3 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x+1/2,-y+1/2,-z + - -y+1/2,-x+1/2,z + - -x+1/2,y+1/2,-z + - y+1/2,x+1/2,z + universal_h_m: P -4 21 m +- crystal_class: tetragonal + hall: " P -4 2n" + hermann_mauguin: P -4 21 c + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x+1/2,-y+1/2,-z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 114 + schoenflies: D2d^4 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x+1/2,-y+1/2,-z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: P -4 21 c +- crystal_class: tetragonal + hall: " P -4 -2" + hermann_mauguin: P -4 m 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z + - y,x,-z + - x,-y,z + - -y,-x,-z + number: 115 + schoenflies: D2d^5 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z + - y,x,-z + - x,-y,z + - -y,-x,-z + universal_h_m: P -4 m 2 +- crystal_class: tetragonal + hall: " P -4 -2c" + hermann_mauguin: P -4 c 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z+1/2 + - y,x,-z+1/2 + - x,-y,z+1/2 + - -y,-x,-z+1/2 + number: 116 + schoenflies: D2d^6 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z+1/2 + - y,x,-z+1/2 + - x,-y,z+1/2 + - -y,-x,-z+1/2 + universal_h_m: P -4 c 2 +- crystal_class: tetragonal + hall: " P -4 -2ab" + hermann_mauguin: P -4 b 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x+1/2,y+1/2,z + - y+1/2,x+1/2,-z + - x+1/2,-y+1/2,z + - -y+1/2,-x+1/2,-z + number: 117 + schoenflies: D2d^7 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x+1/2,y+1/2,z + - y+1/2,x+1/2,-z + - x+1/2,-y+1/2,z + - -y+1/2,-x+1/2,-z + universal_h_m: P -4 b 2 +- crystal_class: tetragonal + hall: " P -4 -2n" + hermann_mauguin: P -4 n 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + number: 118 + schoenflies: D2d^8 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + universal_h_m: P -4 n 2 +- crystal_class: tetragonal + hall: " I -4 -2" + hermann_mauguin: I -4 m 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z + - y,x,-z + - x,-y,z + - -y,-x,-z + number: 119 + schoenflies: D2d^9 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z + - y,x,-z + - x,-y,z + - -y,-x,-z + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + universal_h_m: I -4 m 2 +- crystal_class: tetragonal + hall: " I -4 -2c" + hermann_mauguin: I -4 c 2 + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z+1/2 + - y,x,-z+1/2 + - x,-y,z+1/2 + - -y,-x,-z+1/2 + number: 120 + schoenflies: D2d^10 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - -x,y,z+1/2 + - y,x,-z+1/2 + - x,-y,z+1/2 + - -y,-x,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1 + - y+1/2,x+1/2,-z+1 + - x+1/2,-y+1/2,z+1 + - -y+1/2,-x+1/2,-z+1 + universal_h_m: I -4 c 2 +- crystal_class: tetragonal + hall: " I -4 2" + hermann_mauguin: I -4 2 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + number: 121 + schoenflies: D2d^11 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: I -4 2 m +- crystal_class: tetragonal + hall: " I -4 2bw" + hermann_mauguin: I -4 2 d + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y+1/2,-z+1/4 + - -y+1/2,-x,z+3/4 + - -x,y+1/2,-z+1/4 + - y+1/2,x,z+3/4 + number: 122 + schoenflies: D2d^12 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y+1/2,-z+1/4 + - -y+1/2,-x,z+3/4 + - -x,y+1/2,-z+1/4 + - y+1/2,x,z+3/4 + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1,-z+3/4 + - -y+1,-x+1/2,z+5/4 + - -x+1/2,y+1,-z+3/4 + - y+1,x+1/2,z+5/4 + universal_h_m: I -4 2 d +- crystal_class: tetragonal + hall: -P 4 2 + hermann_mauguin: P 4/m m m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 123 + schoenflies: D4h^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + universal_h_m: P 4/m m m +- crystal_class: tetragonal + hall: -P 4 2c + hermann_mauguin: P 4/m c c + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z-1/2 + - -y,-x,z-1/2 + - x,-y,z-1/2 + - y,x,z-1/2 + number: 124 + schoenflies: D4h^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z-1/2 + - -y,-x,z-1/2 + - x,-y,z-1/2 + - y,x,z-1/2 + universal_h_m: P 4/m c c +- crystal_class: tetragonal + hall: " P 4 2 -1ab" + hermann_mauguin: P 4/n b m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + number: 125 + schoenflies: D4h^3 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + universal_h_m: P 4/n b m :1 +- crystal_class: tetragonal + hall: -P 4a 2b + hermann_mauguin: P 4/n b m + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z + - -y,-x,z + - x-1/2,-y,z + - y-1/2,x-1/2,z + number: 125 + schoenflies: D4h^3 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z + - -y,-x,z + - x-1/2,-y,z + - y-1/2,x-1/2,z + universal_h_m: P 4/n b m :2 +- crystal_class: tetragonal + hall: " P 4 2 -1n" + hermann_mauguin: P 4/n n c + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 126 + schoenflies: D4h^4 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: P 4/n n c :1 +- crystal_class: tetragonal + hall: -P 4a 2bc + hermann_mauguin: P 4/n n c + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z-1/2 + - -y,-x,z-1/2 + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z-1/2 + number: 126 + schoenflies: D4h^4 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z-1/2 + - -y,-x,z-1/2 + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z-1/2 + universal_h_m: P 4/n n c :2 +- crystal_class: tetragonal + hall: -P 4 2ab + hermann_mauguin: P 4/m b m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x-1/2,y-1/2,z + - -y-1/2,-x-1/2,z + - x-1/2,-y-1/2,z + - y-1/2,x-1/2,z + number: 127 + schoenflies: D4h^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x-1/2,y-1/2,z + - -y-1/2,-x-1/2,z + - x-1/2,-y-1/2,z + - y-1/2,x-1/2,z + universal_h_m: P 4/m b m +- crystal_class: tetragonal + hall: -P 4 2n + hermann_mauguin: P 4/m n c + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x-1/2,y-1/2,z-1/2 + - -y-1/2,-x-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + - y-1/2,x-1/2,z-1/2 + number: 128 + schoenflies: D4h^6 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x-1/2,y-1/2,z-1/2 + - -y-1/2,-x-1/2,z-1/2 + - x-1/2,-y-1/2,z-1/2 + - y-1/2,x-1/2,z-1/2 + universal_h_m: P 4/m n c +- crystal_class: tetragonal + hall: " P 4ab 2ab -1ab" + hermann_mauguin: P 4/n m m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z + - -y+1/2,-x+1/2,z + - x,-y,z + - y+1/2,x+1/2,z + number: 129 + schoenflies: D4h^7 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z + - -y+1/2,-x+1/2,z + - x,-y,z + - y+1/2,x+1/2,z + universal_h_m: P 4/n m m :1 +- crystal_class: tetragonal + hall: -P 4a 2a + hermann_mauguin: P 4/n m m + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x+1/2,-y,-z + - y+1/2,x+1/2,-z + - -x,y+1/2,-z + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x-1/2,y,z + - -y-1/2,-x-1/2,z + - x,-y-1/2,z + - y,x,z + number: 129 + schoenflies: D4h^7 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x+1/2,-y,-z + - y+1/2,x+1/2,-z + - -x,y+1/2,-z + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x-1/2,y,z + - -y-1/2,-x-1/2,z + - x,-y-1/2,z + - y,x,z + universal_h_m: P 4/n m m :2 +- crystal_class: tetragonal + hall: " P 4ab 2n -1ab" + hermann_mauguin: P 4/n c c + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z-1/2 + - -y+1/2,-x+1/2,z-1/2 + - x,-y,z-1/2 + - y+1/2,x+1/2,z-1/2 + number: 130 + schoenflies: D4h^8 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z-1/2 + - -y+1/2,-x+1/2,z-1/2 + - x,-y,z-1/2 + - y+1/2,x+1/2,z-1/2 + universal_h_m: P 4/n c c :1 +- crystal_class: tetragonal + hall: -P 4a 2ac + hermann_mauguin: P 4/n c c + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x-1/2,y,z-1/2 + - -y-1/2,-x-1/2,z-1/2 + - x,-y-1/2,z-1/2 + - y,x,z-1/2 + number: 130 + schoenflies: D4h^8 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x-1/2,y,z-1/2 + - -y-1/2,-x-1/2,z-1/2 + - x,-y-1/2,z-1/2 + - y,x,z-1/2 + universal_h_m: P 4/n c c :2 +- crystal_class: tetragonal + hall: -P 4c 2 + hermann_mauguin: P 42/m m c + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x,y,z + - -y,-x,z-1/2 + - x,-y,z + - y,x,z-1/2 + number: 131 + schoenflies: D4h^9 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x,y,z + - -y,-x,z-1/2 + - x,-y,z + - y,x,z-1/2 + universal_h_m: P 42/m m c +- crystal_class: tetragonal + hall: -P 4c 2c + hermann_mauguin: P 42/m c m + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x,y,z-1/2 + - -y,-x,z + - x,-y,z-1/2 + - y,x,z + number: 132 + schoenflies: D4h^10 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x,y,z-1/2 + - -y,-x,z + - x,-y,z-1/2 + - y,x,z + universal_h_m: P 42/m c m +- crystal_class: tetragonal + hall: " P 4n 2c -1n" + hermann_mauguin: P 42/n b c + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z + - y,x,z+1/2 + number: 133 + schoenflies: D4h^11 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z + - y,x,z+1/2 + universal_h_m: P 42/n b c :1 +- crystal_class: tetragonal + hall: -P 4ac 2b + hermann_mauguin: P 42/n b c + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x,y-1/2,z + - -y,-x,z-1/2 + - x-1/2,-y,z + - y-1/2,x-1/2,z-1/2 + number: 133 + schoenflies: D4h^11 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x,y-1/2,z + - -y,-x,z-1/2 + - x-1/2,-y,z + - y-1/2,x-1/2,z-1/2 + universal_h_m: P 42/n b c :2 +- crystal_class: tetragonal + hall: " P 4n 2 -1n" + hermann_mauguin: P 42/n n m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + number: 134 + schoenflies: D4h^12 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + universal_h_m: P 42/n n m :1 +- crystal_class: tetragonal + hall: -P 4ac 2bc + hermann_mauguin: P 42/n n m + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - -y,-x,z + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z + number: 134 + schoenflies: D4h^12 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x,y-1/2,z-1/2 + - -y,-x,z + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z + universal_h_m: P 42/n n m :2 +- crystal_class: tetragonal + hall: -P 4c 2ab + hermann_mauguin: P 42/m b c + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x-1/2,y-1/2,z + - -y-1/2,-x-1/2,z-1/2 + - x-1/2,-y-1/2,z + - y-1/2,x-1/2,z-1/2 + number: 135 + schoenflies: D4h^13 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y,-x,-z-1/2 + - x,y,-z + - -y,x,-z-1/2 + - -x-1/2,y-1/2,z + - -y-1/2,-x-1/2,z-1/2 + - x-1/2,-y-1/2,z + - y-1/2,x-1/2,z-1/2 + universal_h_m: P 42/m b c +- crystal_class: tetragonal + hall: -P 4n 2n + hermann_mauguin: P 42/m n m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x-1/2,-z-1/2 + - x,y,-z + - -y-1/2,x-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - -y,-x,z + - x-1/2,-y-1/2,z-1/2 + - y,x,z + number: 136 + schoenflies: D4h^14 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x-1/2,-z-1/2 + - x,y,-z + - -y-1/2,x-1/2,-z-1/2 + - -x-1/2,y-1/2,z-1/2 + - -y,-x,z + - x-1/2,-y-1/2,z-1/2 + - y,x,z + universal_h_m: P 42/m n m +- crystal_class: tetragonal + hall: " P 4n 2n -1n" + hermann_mauguin: P 42/n m c + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x,y,z + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z + - y+1/2,x+1/2,z+1/2 + number: 137 + schoenflies: D4h^15 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x,y,z + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z + - y+1/2,x+1/2,z+1/2 + universal_h_m: P 42/n m c :1 +- crystal_class: tetragonal + hall: -P 4ac 2a + hermann_mauguin: P 42/n m c + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x-1/2,y,z + - -y-1/2,-x-1/2,z-1/2 + - x,-y-1/2,z + - y,x,z-1/2 + number: 137 + schoenflies: D4h^15 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x-1/2,y,z + - -y-1/2,-x-1/2,z-1/2 + - x,-y-1/2,z + - y,x,z-1/2 + universal_h_m: P 42/n m c :2 +- crystal_class: tetragonal + hall: " P 4n 2ab -1n" + hermann_mauguin: P 42/n c m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z + - x,-y,z+1/2 + - y+1/2,x+1/2,z + number: 138 + schoenflies: D4h^16 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z + - x,-y,z+1/2 + - y+1/2,x+1/2,z + universal_h_m: P 42/n c m :1 +- crystal_class: tetragonal + hall: -P 4ac 2ac + hermann_mauguin: P 42/n c m + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y+1/2,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - -y-1/2,-x-1/2,z + - x,-y-1/2,z-1/2 + - y,x,z + number: 138 + schoenflies: D4h^16 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y+1/2,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y-1/2,-x,-z-1/2 + - x-1/2,y-1/2,-z + - -y,x-1/2,-z-1/2 + - -x-1/2,y,z-1/2 + - -y-1/2,-x-1/2,z + - x,-y-1/2,z-1/2 + - y,x,z + universal_h_m: P 42/n c m :2 +- crystal_class: tetragonal + hall: -I 4 2 + hermann_mauguin: I 4/m m m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: I 4/m m m +- crystal_class: tetragonal + hall: -I 4 2c + hermann_mauguin: I 4/m c m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z-1/2 + - -y,-x,z-1/2 + - x,-y,z-1/2 + - y,x,z-1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z-1/2 + - -y,-x,z-1/2 + - x,-y,z-1/2 + - y,x,z-1/2 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1 + - y+1/2,x+1/2,-z+1 + - -x+1/2,y+1/2,-z+1 + - -y+1/2,-x+1/2,-z+1 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + universal_h_m: I 4/m c m +- crystal_class: tetragonal + hall: " I 4bw 2bw -1bw" + hermann_mauguin: I 41/a m d + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x,-y+1/2,-z+1/4 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+3/4 + - -y,-x,-z + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + - -x,y,z + - -y-1/2,-x,z-1/4 + - x-1/2,-y+1/2,z-1/2 + - y,x+1/2,z+1/4 + number: 141 + schoenflies: D4h^19 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x,-y+1/2,-z+1/4 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+3/4 + - -y,-x,-z + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + - -x,y,z + - -y-1/2,-x,z-1/4 + - x-1/2,-y+1/2,z-1/2 + - y,x+1/2,z+1/4 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - x+1/2,-y+1,-z+3/4 + - y+1,x+1,-z+1 + - -x+1,y+1/2,-z+5/4 + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1,-z+3/4 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/4 + - -y,x+1,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x+1/2,z+1/4 + - x,-y+1,z + - y+1/2,x+1,z+3/4 + universal_h_m: I 41/a m d :1 +- crystal_class: tetragonal + hall: -I 4bd 2 + hermann_mauguin: I 41/a m d + ncsym: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+3/4,-z+1/4 + - -x+1/2,y,-z+1/2 + - -y+1/4,-x+1/4,-z+3/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z + - -y-1/4,-x-3/4,z-1/4 + - x-1/2,-y,z-1/2 + - y-1/4,x-1/4,z-3/4 + number: 141 + schoenflies: D4h^19 + symops: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+3/4,-z+1/4 + - -x+1/2,y,-z+1/2 + - -y+1/4,-x+1/4,-z+3/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z + - -y-1/4,-x-3/4,z-1/4 + - x-1/2,-y,z-1/2 + - y-1/4,x-1/4,z-3/4 + - x+1/2,y+1/2,z+1/2 + - -y+3/4,x+5/4,z+3/4 + - -x+1,-y+1/2,z+1 + - y+3/4,-x+3/4,z+5/4 + - x+1/2,-y+1/2,-z+1/2 + - y+3/4,x+5/4,-z+3/4 + - -x+1,y+1/2,-z+1 + - -y+3/4,-x+3/4,-z+5/4 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/4,-x-1/4,-z+1/4 + - x,y+1/2,-z + - -y+1/4,x+1/4,-z-1/4 + - -x+1/2,y+1/2,z+1/2 + - -y+1/4,-x-1/4,z+1/4 + - x,-y+1/2,z + - y+1/4,x+1/4,z-1/4 + universal_h_m: I 41/a m d :2 +- crystal_class: tetragonal + hall: " I 4bw 2aw -1bw" + hermann_mauguin: I 41/a c d + ncsym: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x+1/2,-y,-z+1/4 + - y,x,-z+1/2 + - -x,y+1/2,-z+3/4 + - -y+1/2,-x+1/2,-z + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + - -x-1/2,y+1/2,z + - -y,-x+1/2,z-1/4 + - x,-y,z-1/2 + - y-1/2,x,z+1/4 + number: 142 + schoenflies: D4h^20 + symops: + - x,y,z + - -y,x+1/2,z+1/4 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x,z+3/4 + - x+1/2,-y,-z+1/4 + - y,x,-z+1/2 + - -x,y+1/2,-z+3/4 + - -y+1/2,-x+1/2,-z + - -x,-y+1/2,-z+1/4 + - y,-x,-z + - x-1/2,y,-z-1/4 + - -y-1/2,x+1/2,-z-1/2 + - -x-1/2,y+1/2,z + - -y,-x+1/2,z-1/4 + - x,-y,z-1/2 + - y-1/2,x,z+1/4 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1,z+3/4 + - -x+1,-y+1,z+1 + - y+1,-x+1/2,z+5/4 + - x+1,-y+1/2,-z+3/4 + - y+1/2,x+1/2,-z+1 + - -x+1/2,y+1,-z+5/4 + - -y+1,-x+1,-z+1/2 + - -x+1/2,-y+1,-z+3/4 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/4 + - -y,x+1,-z + - -x,y+1,z+1/2 + - -y+1/2,-x+1,z+1/4 + - x+1/2,-y+1/2,z + - y,x+1/2,z+3/4 + universal_h_m: I 41/a c d :1 +- crystal_class: tetragonal + hall: -I 4bd 2c + hermann_mauguin: I 41/a c d + ncsym: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z-1/2 + - -y-1/4,-x-3/4,z-3/4 + - x-1/2,-y,z + - y-1/4,x-1/4,z-1/4 + number: 142 + schoenflies: D4h^20 + symops: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z-1/2 + - -y-1/4,-x-3/4,z-3/4 + - x-1/2,-y,z + - y-1/4,x-1/4,z-1/4 + - x+1/2,y+1/2,z+1/2 + - -y+3/4,x+5/4,z+3/4 + - -x+1,-y+1/2,z+1 + - y+3/4,-x+3/4,z+5/4 + - x+1/2,-y+1/2,-z+1 + - y+3/4,x+5/4,-z+5/4 + - -x+1,y+1/2,-z+1/2 + - -y+3/4,-x+3/4,-z+3/4 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/4,-x-1/4,-z+1/4 + - x,y+1/2,-z + - -y+1/4,x+1/4,-z-1/4 + - -x+1/2,y+1/2,z + - -y+1/4,-x-1/4,z-1/4 + - x,-y+1/2,z+1/2 + - y+1/4,x+1/4,z+1/4 + universal_h_m: I 41/a c d :2 +- crystal_class: trigonal + hall: " P 3" + hermann_mauguin: P 3 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + number: 143 + schoenflies: C3^1 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + universal_h_m: P 3 +- crystal_class: trigonal + hall: " P 31" + hermann_mauguin: P 31 + ncsym: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + number: 144 + schoenflies: C3^2 + symops: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + universal_h_m: P 31 +- crystal_class: trigonal + hall: " P 32" + hermann_mauguin: P 32 + ncsym: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + number: 145 + schoenflies: C3^3 + symops: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + universal_h_m: P 32 +- crystal_class: rhombohedral + hall: " R 3" + hermann_mauguin: R 3 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + number: 146 + schoenflies: C3^4 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + universal_h_m: R 3 :H +- crystal_class: rhombohedral + hall: " P 3*" + hermann_mauguin: R 3 + ncsym: + - x,y,z + - z,x,y + - y,z,x + number: 146 + schoenflies: C3^4 + symops: + - x,y,z + - z,x,y + - y,z,x + universal_h_m: R 3 :R +- crystal_class: trigonal + hall: -P 3 + hermann_mauguin: P -3 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + number: 147 + schoenflies: C3i^1 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + universal_h_m: P -3 +- crystal_class: rhombohedral + hall: -R 3 + hermann_mauguin: R -3 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + number: 148 + schoenflies: C3i^2 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - -x+2/3,-y+1/3,-z+1/3 + - y+2/3,-x+y+1/3,-z+1/3 + - x-y+2/3,x+1/3,-z+1/3 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - -x+1/3,-y+2/3,-z+2/3 + - y+1/3,-x+y+2/3,-z+2/3 + - x-y+1/3,x+2/3,-z+2/3 + universal_h_m: R -3 :H +- crystal_class: rhombohedral + hall: -P 3* + hermann_mauguin: R -3 + ncsym: + - x,y,z + - z,x,y + - y,z,x + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + number: 148 + schoenflies: C3i^2 + symops: + - x,y,z + - z,x,y + - y,z,x + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + universal_h_m: R -3 :R +- crystal_class: trigonal + hall: " P 3 2" + hermann_mauguin: P 3 1 2 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z + - x,x-y,-z + - -x+y,y,-z + number: 149 + schoenflies: D3^1 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z + - x,x-y,-z + - -x+y,y,-z + universal_h_m: P 3 1 2 +- crystal_class: trigonal + hall: ' P 3 2"' + hermann_mauguin: P 3 2 1 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + number: 150 + schoenflies: D3^2 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + universal_h_m: P 3 2 1 +- crystal_class: trigonal + hall: " P 31 2 (0 0 4)" + hermann_mauguin: P 31 1 2 + ncsym: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + - -y,-x,-z+2/3 + - x,x-y,-z + - -x+y,y,-z+1/3 + number: 151 + schoenflies: D3^3 + symops: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + - -y,-x,-z+2/3 + - x,x-y,-z + - -x+y,y,-z+1/3 + universal_h_m: P 31 1 2 +- crystal_class: trigonal + hall: ' P 31 2"' + hermann_mauguin: P 31 2 1 + ncsym: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + - y,x,-z + - -x,-x+y,-z+1/3 + - x-y,-y,-z+2/3 + number: 152 + schoenflies: D3^4 + symops: + - x,y,z + - -y,x-y,z+1/3 + - -x+y,-x,z+2/3 + - y,x,-z + - -x,-x+y,-z+1/3 + - x-y,-y,-z+2/3 + universal_h_m: P 31 2 1 +- crystal_class: trigonal + hall: " P 32 2 (0 0 2)" + hermann_mauguin: P 32 1 2 + ncsym: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + - -y,-x,-z+1/3 + - x,x-y,-z + - -x+y,y,-z+2/3 + number: 153 + schoenflies: D3^5 + symops: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + - -y,-x,-z+1/3 + - x,x-y,-z + - -x+y,y,-z+2/3 + universal_h_m: P 32 1 2 +- crystal_class: trigonal + hall: ' P 32 2"' + hermann_mauguin: P 32 2 1 + ncsym: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + - y,x,-z + - -x,-x+y,-z+2/3 + - x-y,-y,-z+1/3 + number: 154 + schoenflies: D3^6 + symops: + - x,y,z + - -y,x-y,z+2/3 + - -x+y,-x,z+1/3 + - y,x,-z + - -x,-x+y,-z+2/3 + - x-y,-y,-z+1/3 + universal_h_m: P 32 2 1 +- crystal_class: rhombohedral + hall: ' R 3 2"' + hermann_mauguin: R 3 2 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + number: 155 + schoenflies: D3^7 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - y+2/3,x+1/3,-z+1/3 + - -x+2/3,-x+y+1/3,-z+1/3 + - x-y+2/3,-y+1/3,-z+1/3 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - y+1/3,x+2/3,-z+2/3 + - -x+1/3,-x+y+2/3,-z+2/3 + - x-y+1/3,-y+2/3,-z+2/3 + universal_h_m: R 3 2 :H +- crystal_class: rhombohedral + hall: " P 3* 2" + hermann_mauguin: R 3 2 + ncsym: + - x,y,z + - z,x,y + - y,z,x + - -y,-x,-z + - -z,-y,-x + - -x,-z,-y + number: 155 + schoenflies: D3^7 + symops: + - x,y,z + - z,x,y + - y,z,x + - -y,-x,-z + - -z,-y,-x + - -x,-z,-y + universal_h_m: R 3 2 :R +- crystal_class: trigonal + hall: ' P 3 -2"' + hermann_mauguin: P 3 m 1 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + number: 156 + schoenflies: C3v^1 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + universal_h_m: P 3 m 1 +- crystal_class: trigonal + hall: " P 3 -2" + hermann_mauguin: P 3 1 m + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,z + - -x,-x+y,z + - x-y,-y,z + number: 157 + schoenflies: C3v^2 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,z + - -x,-x+y,z + - x-y,-y,z + universal_h_m: P 3 1 m +- crystal_class: trigonal + hall: ' P 3 -2"c' + hermann_mauguin: P 3 c 1 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z+1/2 + - x,x-y,z+1/2 + - -x+y,y,z+1/2 + number: 158 + schoenflies: C3v^3 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z+1/2 + - x,x-y,z+1/2 + - -x+y,y,z+1/2 + universal_h_m: P 3 c 1 +- crystal_class: trigonal + hall: " P 3 -2c" + hermann_mauguin: P 3 1 c + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,z+1/2 + - -x,-x+y,z+1/2 + - x-y,-y,z+1/2 + number: 159 + schoenflies: C3v^4 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,z+1/2 + - -x,-x+y,z+1/2 + - x-y,-y,z+1/2 + universal_h_m: P 3 1 c +- crystal_class: rhombohedral + hall: ' R 3 -2"' + hermann_mauguin: R 3 m + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + number: 160 + schoenflies: C3v^5 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - -y+2/3,-x+1/3,z+1/3 + - x+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,y+1/3,z+1/3 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - -y+1/3,-x+2/3,z+2/3 + - x+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,y+2/3,z+2/3 + universal_h_m: R 3 m :H +- crystal_class: rhombohedral + hall: " P 3* -2" + hermann_mauguin: R 3 m + ncsym: + - x,y,z + - z,x,y + - y,z,x + - y,x,z + - z,y,x + - x,z,y + number: 160 + schoenflies: C3v^5 + symops: + - x,y,z + - z,x,y + - y,z,x + - y,x,z + - z,y,x + - x,z,y + universal_h_m: R 3 m :R +- crystal_class: rhombohedral + hall: ' R 3 -2"c' + hermann_mauguin: R 3 c + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z+1/2 + - x,x-y,z+1/2 + - -x+y,y,z+1/2 + number: 161 + schoenflies: C3v^6 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,z+1/2 + - x,x-y,z+1/2 + - -x+y,y,z+1/2 + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - -y+2/3,-x+1/3,z+5/6 + - x+2/3,x-y+1/3,z+5/6 + - -x+y+2/3,y+1/3,z+5/6 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - -y+1/3,-x+2/3,z+7/6 + - x+1/3,x-y+2/3,z+7/6 + - -x+y+1/3,y+2/3,z+7/6 + universal_h_m: R 3 c :H +- crystal_class: rhombohedral + hall: " P 3* -2n" + hermann_mauguin: R 3 c + ncsym: + - x,y,z + - z,x,y + - y,z,x + - y+1/2,x+1/2,z+1/2 + - z+1/2,y+1/2,x+1/2 + - x+1/2,z+1/2,y+1/2 + number: 161 + schoenflies: C3v^6 + symops: + - x,y,z + - z,x,y + - y,z,x + - y+1/2,x+1/2,z+1/2 + - z+1/2,y+1/2,x+1/2 + - x+1/2,z+1/2,y+1/2 + universal_h_m: R 3 c :R +- crystal_class: trigonal + hall: -P 3 2 + hermann_mauguin: P -3 1 m + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z + - x,x-y,-z + - -x+y,y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - y,x,z + - -x,-x+y,z + - x-y,-y,z + number: 162 + schoenflies: D3d^1 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z + - x,x-y,-z + - -x+y,y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - y,x,z + - -x,-x+y,z + - x-y,-y,z + universal_h_m: P -3 1 m +- crystal_class: trigonal + hall: -P 3 2c + hermann_mauguin: P -3 1 c + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z+1/2 + - x,x-y,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - y,x,z-1/2 + - -x,-x+y,z-1/2 + - x-y,-y,z-1/2 + number: 163 + schoenflies: D3d^2 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - -y,-x,-z+1/2 + - x,x-y,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - y,x,z-1/2 + - -x,-x+y,z-1/2 + - x-y,-y,z-1/2 + universal_h_m: P -3 1 c +- crystal_class: trigonal + hall: -P 3 2" + hermann_mauguin: P -3 m 1 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + number: 164 + schoenflies: D3d^3 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + universal_h_m: P -3 m 1 +- crystal_class: trigonal + hall: -P 3 2"c + hermann_mauguin: P -3 c 1 + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z+1/2 + - -x,-x+y,-z+1/2 + - x-y,-y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z-1/2 + - x,x-y,z-1/2 + - -x+y,y,z-1/2 + number: 165 + schoenflies: D3d^4 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z+1/2 + - -x,-x+y,-z+1/2 + - x-y,-y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z-1/2 + - x,x-y,z-1/2 + - -x+y,y,z-1/2 + universal_h_m: P -3 c 1 +- crystal_class: rhombohedral + hall: -R 3 2" + hermann_mauguin: R -3 m + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + number: 166 + schoenflies: D3d^5 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z + - -x,-x+y,-z + - x-y,-y,-z + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z + - x,x-y,z + - -x+y,y,z + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - y+2/3,x+1/3,-z+1/3 + - -x+2/3,-x+y+1/3,-z+1/3 + - x-y+2/3,-y+1/3,-z+1/3 + - -x+2/3,-y+1/3,-z+1/3 + - y+2/3,-x+y+1/3,-z+1/3 + - x-y+2/3,x+1/3,-z+1/3 + - -y+2/3,-x+1/3,z+1/3 + - x+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,y+1/3,z+1/3 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - y+1/3,x+2/3,-z+2/3 + - -x+1/3,-x+y+2/3,-z+2/3 + - x-y+1/3,-y+2/3,-z+2/3 + - -x+1/3,-y+2/3,-z+2/3 + - y+1/3,-x+y+2/3,-z+2/3 + - x-y+1/3,x+2/3,-z+2/3 + - -y+1/3,-x+2/3,z+2/3 + - x+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,y+2/3,z+2/3 + universal_h_m: R -3 m :H +- crystal_class: rhombohedral + hall: -P 3* 2 + hermann_mauguin: R -3 m + ncsym: + - x,y,z + - z,x,y + - y,z,x + - -y,-x,-z + - -z,-y,-x + - -x,-z,-y + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + - y,x,z + - z,y,x + - x,z,y + number: 166 + schoenflies: D3d^5 + symops: + - x,y,z + - z,x,y + - y,z,x + - -y,-x,-z + - -z,-y,-x + - -x,-z,-y + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + - y,x,z + - z,y,x + - x,z,y + universal_h_m: R -3 m :R +- crystal_class: rhombohedral + hall: -R 3 2"c + hermann_mauguin: R -3 c + ncsym: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z+1/2 + - -x,-x+y,-z+1/2 + - x-y,-y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z-1/2 + - x,x-y,z-1/2 + - -x+y,y,z-1/2 + number: 167 + schoenflies: D3d^6 + symops: + - x,y,z + - -y,x-y,z + - -x+y,-x,z + - y,x,-z+1/2 + - -x,-x+y,-z+1/2 + - x-y,-y,-z+1/2 + - -x,-y,-z + - y,-x+y,-z + - x-y,x,-z + - -y,-x,z-1/2 + - x,x-y,z-1/2 + - -x+y,y,z-1/2 + - x+2/3,y+1/3,z+1/3 + - -y+2/3,x-y+1/3,z+1/3 + - -x+y+2/3,-x+1/3,z+1/3 + - y+2/3,x+1/3,-z+5/6 + - -x+2/3,-x+y+1/3,-z+5/6 + - x-y+2/3,-y+1/3,-z+5/6 + - -x+2/3,-y+1/3,-z+1/3 + - y+2/3,-x+y+1/3,-z+1/3 + - x-y+2/3,x+1/3,-z+1/3 + - -y+2/3,-x+1/3,z-1/6 + - x+2/3,x-y+1/3,z-1/6 + - -x+y+2/3,y+1/3,z-1/6 + - x+1/3,y+2/3,z+2/3 + - -y+1/3,x-y+2/3,z+2/3 + - -x+y+1/3,-x+2/3,z+2/3 + - y+1/3,x+2/3,-z+7/6 + - -x+1/3,-x+y+2/3,-z+7/6 + - x-y+1/3,-y+2/3,-z+7/6 + - -x+1/3,-y+2/3,-z+2/3 + - y+1/3,-x+y+2/3,-z+2/3 + - x-y+1/3,x+2/3,-z+2/3 + - -y+1/3,-x+2/3,z+1/6 + - x+1/3,x-y+2/3,z+1/6 + - -x+y+1/3,y+2/3,z+1/6 + universal_h_m: R -3 c :H +- crystal_class: rhombohedral + hall: -P 3* 2n + hermann_mauguin: R -3 c + ncsym: + - x,y,z + - z,x,y + - y,z,x + - -y+1/2,-x+1/2,-z+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + - y-1/2,x-1/2,z-1/2 + - z-1/2,y-1/2,x-1/2 + - x-1/2,z-1/2,y-1/2 + number: 167 + schoenflies: D3d^6 + symops: + - x,y,z + - z,x,y + - y,z,x + - -y+1/2,-x+1/2,-z+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - -x,-y,-z + - -z,-x,-y + - -y,-z,-x + - y-1/2,x-1/2,z-1/2 + - z-1/2,y-1/2,x-1/2 + - x-1/2,z-1/2,y-1/2 + universal_h_m: R -3 c :R +- crystal_class: hexagonal + hall: " P 6" + hermann_mauguin: P 6 + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + number: 168 + schoenflies: C6^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + universal_h_m: P 6 +- crystal_class: hexagonal + hall: " P 61" + hermann_mauguin: P 61 + ncsym: + - x,y,z + - x-y,x,z+1/6 + - -y,x-y,z+1/3 + - -x,-y,z+1/2 + - -x+y,-x,z+2/3 + - y,-x+y,z+5/6 + number: 169 + schoenflies: C6^2 + symops: + - x,y,z + - x-y,x,z+1/6 + - -y,x-y,z+1/3 + - -x,-y,z+1/2 + - -x+y,-x,z+2/3 + - y,-x+y,z+5/6 + universal_h_m: P 61 +- crystal_class: hexagonal + hall: " P 65" + hermann_mauguin: P 65 + ncsym: + - x,y,z + - x-y,x,z+5/6 + - -y,x-y,z+2/3 + - -x,-y,z+1/2 + - -x+y,-x,z+1/3 + - y,-x+y,z+1/6 + number: 170 + schoenflies: C6^3 + symops: + - x,y,z + - x-y,x,z+5/6 + - -y,x-y,z+2/3 + - -x,-y,z+1/2 + - -x+y,-x,z+1/3 + - y,-x+y,z+1/6 + universal_h_m: P 65 +- crystal_class: hexagonal + hall: " P 62" + hermann_mauguin: P 62 + ncsym: + - x,y,z + - x-y,x,z+1/3 + - -y,x-y,z+2/3 + - -x,-y,z + - -x+y,-x,z+1/3 + - y,-x+y,z+2/3 + number: 171 + schoenflies: C6^4 + symops: + - x,y,z + - x-y,x,z+1/3 + - -y,x-y,z+2/3 + - -x,-y,z + - -x+y,-x,z+1/3 + - y,-x+y,z+2/3 + universal_h_m: P 62 +- crystal_class: hexagonal + hall: " P 64" + hermann_mauguin: P 64 + ncsym: + - x,y,z + - x-y,x,z+2/3 + - -y,x-y,z+1/3 + - -x,-y,z + - -x+y,-x,z+2/3 + - y,-x+y,z+1/3 + number: 172 + schoenflies: C6^5 + symops: + - x,y,z + - x-y,x,z+2/3 + - -y,x-y,z+1/3 + - -x,-y,z + - -x+y,-x,z+2/3 + - y,-x+y,z+1/3 + universal_h_m: P 64 +- crystal_class: hexagonal + hall: " P 6c" + hermann_mauguin: P 63 + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + number: 173 + schoenflies: C6^6 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + universal_h_m: P 63 +- crystal_class: hexagonal + hall: " P -6" + hermann_mauguin: P -6 + ncsym: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + number: 174 + schoenflies: C3h^1 + symops: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + universal_h_m: P -6 +- crystal_class: hexagonal + hall: -P 6 + hermann_mauguin: P 6/m + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + number: 175 + schoenflies: C6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + universal_h_m: P 6/m +- crystal_class: hexagonal + hall: -P 6c + hermann_mauguin: P 63/m + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + number: 176 + schoenflies: C6h^2 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + universal_h_m: P 63/m +- crystal_class: hexagonal + hall: " P 6 2" + hermann_mauguin: P 6 2 2 + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + number: 177 + schoenflies: D6^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + universal_h_m: P 6 2 2 +- crystal_class: hexagonal + hall: " P 61 2 (0 0 5)" + hermann_mauguin: P 61 2 2 + ncsym: + - x,y,z + - x-y,x,z+1/6 + - -y,x-y,z+1/3 + - -x,-y,z+1/2 + - -x+y,-x,z+2/3 + - y,-x+y,z+5/6 + - -y,-x,-z+5/6 + - x-y,-y,-z + - x,x-y,-z+1/6 + - y,x,-z+1/3 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+2/3 + number: 178 + schoenflies: D6^2 + symops: + - x,y,z + - x-y,x,z+1/6 + - -y,x-y,z+1/3 + - -x,-y,z+1/2 + - -x+y,-x,z+2/3 + - y,-x+y,z+5/6 + - -y,-x,-z+5/6 + - x-y,-y,-z + - x,x-y,-z+1/6 + - y,x,-z+1/3 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+2/3 + universal_h_m: P 61 2 2 +- crystal_class: hexagonal + hall: " P 65 2 (0 0 1)" + hermann_mauguin: P 65 2 2 + ncsym: + - x,y,z + - x-y,x,z+5/6 + - -y,x-y,z+2/3 + - -x,-y,z+1/2 + - -x+y,-x,z+1/3 + - y,-x+y,z+1/6 + - -y,-x,-z+1/6 + - x-y,-y,-z + - x,x-y,-z+5/6 + - y,x,-z+2/3 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/3 + number: 179 + schoenflies: D6^3 + symops: + - x,y,z + - x-y,x,z+5/6 + - -y,x-y,z+2/3 + - -x,-y,z+1/2 + - -x+y,-x,z+1/3 + - y,-x+y,z+1/6 + - -y,-x,-z+1/6 + - x-y,-y,-z + - x,x-y,-z+5/6 + - y,x,-z+2/3 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/3 + universal_h_m: P 65 2 2 +- crystal_class: hexagonal + hall: " P 62 2 (0 0 4)" + hermann_mauguin: P 62 2 2 + ncsym: + - x,y,z + - x-y,x,z+1/3 + - -y,x-y,z+2/3 + - -x,-y,z + - -x+y,-x,z+1/3 + - y,-x+y,z+2/3 + - -y,-x,-z+2/3 + - x-y,-y,-z + - x,x-y,-z+1/3 + - y,x,-z+2/3 + - -x+y,y,-z + - -x,-x+y,-z+1/3 + number: 180 + schoenflies: D6^4 + symops: + - x,y,z + - x-y,x,z+1/3 + - -y,x-y,z+2/3 + - -x,-y,z + - -x+y,-x,z+1/3 + - y,-x+y,z+2/3 + - -y,-x,-z+2/3 + - x-y,-y,-z + - x,x-y,-z+1/3 + - y,x,-z+2/3 + - -x+y,y,-z + - -x,-x+y,-z+1/3 + universal_h_m: P 62 2 2 +- crystal_class: hexagonal + hall: " P 64 2 (0 0 2)" + hermann_mauguin: P 64 2 2 + ncsym: + - x,y,z + - x-y,x,z+2/3 + - -y,x-y,z+1/3 + - -x,-y,z + - -x+y,-x,z+2/3 + - y,-x+y,z+1/3 + - -y,-x,-z+1/3 + - x-y,-y,-z + - x,x-y,-z+2/3 + - y,x,-z+1/3 + - -x+y,y,-z + - -x,-x+y,-z+2/3 + number: 181 + schoenflies: D6^5 + symops: + - x,y,z + - x-y,x,z+2/3 + - -y,x-y,z+1/3 + - -x,-y,z + - -x+y,-x,z+2/3 + - y,-x+y,z+1/3 + - -y,-x,-z+1/3 + - x-y,-y,-z + - x,x-y,-z+2/3 + - y,x,-z+1/3 + - -x+y,y,-z + - -x,-x+y,-z+2/3 + universal_h_m: P 64 2 2 +- crystal_class: hexagonal + hall: " P 6c 2c" + hermann_mauguin: P 63 2 2 + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + number: 182 + schoenflies: D6^6 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + universal_h_m: P 63 2 2 +- crystal_class: hexagonal + hall: " P 6 -2" + hermann_mauguin: P 6 m m + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + number: 183 + schoenflies: C6v^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + universal_h_m: P 6 m m +- crystal_class: hexagonal + hall: " P 6 -2c" + hermann_mauguin: P 6 c c + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - y,x,z+1/2 + - -x+y,y,z+1/2 + - -x,-x+y,z+1/2 + - -y,-x,z+1/2 + - x-y,-y,z+1/2 + - x,x-y,z+1/2 + number: 184 + schoenflies: C6v^2 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - y,x,z+1/2 + - -x+y,y,z+1/2 + - -x,-x+y,z+1/2 + - -y,-x,z+1/2 + - x-y,-y,z+1/2 + - x,x-y,z+1/2 + universal_h_m: P 6 c c +- crystal_class: hexagonal + hall: " P 6c -2" + hermann_mauguin: P 63 c m + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - y,x,z + - -x+y,y,z+1/2 + - -x,-x+y,z + - -y,-x,z+1/2 + - x-y,-y,z + - x,x-y,z+1/2 + number: 185 + schoenflies: C6v^3 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - y,x,z + - -x+y,y,z+1/2 + - -x,-x+y,z + - -y,-x,z+1/2 + - x-y,-y,z + - x,x-y,z+1/2 + universal_h_m: P 63 c m +- crystal_class: hexagonal + hall: " P 6c -2c" + hermann_mauguin: P 63 m c + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - y,x,z+1/2 + - -x+y,y,z + - -x,-x+y,z+1/2 + - -y,-x,z + - x-y,-y,z+1/2 + - x,x-y,z + number: 186 + schoenflies: C6v^4 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - y,x,z+1/2 + - -x+y,y,z + - -x,-x+y,z+1/2 + - -y,-x,z + - x-y,-y,z+1/2 + - x,x-y,z + universal_h_m: P 63 m c +- crystal_class: hexagonal + hall: " P -6 2" + hermann_mauguin: P -6 m 2 + ncsym: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + - -y,-x,-z + - -x+y,y,z + - x,x-y,-z + - -y,-x,z + - -x+y,y,-z + - x,x-y,z + number: 187 + schoenflies: D3h^1 + symops: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + - -y,-x,-z + - -x+y,y,z + - x,x-y,-z + - -y,-x,z + - -x+y,y,-z + - x,x-y,z + universal_h_m: P -6 m 2 +- crystal_class: hexagonal + hall: " P -6c 2" + hermann_mauguin: P -6 c 2 + ncsym: + - x,y,z + - -x+y,-x,-z+1/2 + - -y,x-y,z + - x,y,-z+1/2 + - -x+y,-x,z + - -y,x-y,-z+1/2 + - -y,-x,-z + - -x+y,y,z+1/2 + - x,x-y,-z + - -y,-x,z+1/2 + - -x+y,y,-z + - x,x-y,z+1/2 + number: 188 + schoenflies: D3h^2 + symops: + - x,y,z + - -x+y,-x,-z+1/2 + - -y,x-y,z + - x,y,-z+1/2 + - -x+y,-x,z + - -y,x-y,-z+1/2 + - -y,-x,-z + - -x+y,y,z+1/2 + - x,x-y,-z + - -y,-x,z+1/2 + - -x+y,y,-z + - x,x-y,z+1/2 + universal_h_m: P -6 c 2 +- crystal_class: hexagonal + hall: " P -6 -2" + hermann_mauguin: P -6 2 m + ncsym: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + - y,x,z + - x-y,-y,-z + - -x,-x+y,z + - y,x,-z + - x-y,-y,z + - -x,-x+y,-z + number: 189 + schoenflies: D3h^3 + symops: + - x,y,z + - -x+y,-x,-z + - -y,x-y,z + - x,y,-z + - -x+y,-x,z + - -y,x-y,-z + - y,x,z + - x-y,-y,-z + - -x,-x+y,z + - y,x,-z + - x-y,-y,z + - -x,-x+y,-z + universal_h_m: P -6 2 m +- crystal_class: hexagonal + hall: " P -6c -2c" + hermann_mauguin: P -6 2 c + ncsym: + - x,y,z + - -x+y,-x,-z+1/2 + - -y,x-y,z + - x,y,-z+1/2 + - -x+y,-x,z + - -y,x-y,-z+1/2 + - y,x,z+1/2 + - x-y,-y,-z + - -x,-x+y,z+1/2 + - y,x,-z + - x-y,-y,z+1/2 + - -x,-x+y,-z + number: 190 + schoenflies: D3h^4 + symops: + - x,y,z + - -x+y,-x,-z+1/2 + - -y,x-y,z + - x,y,-z+1/2 + - -x+y,-x,z + - -y,x-y,-z+1/2 + - y,x,z+1/2 + - x-y,-y,-z + - -x,-x+y,z+1/2 + - y,x,-z + - x-y,-y,z+1/2 + - -x,-x+y,-z + universal_h_m: P -6 2 c +- crystal_class: hexagonal + hall: -P 6 2 + hermann_mauguin: P 6/m m m + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + number: 191 + schoenflies: D6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + universal_h_m: P 6/m m m +- crystal_class: hexagonal + hall: -P 6 2c + hermann_mauguin: P 6/m c c + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z+1/2 + - x-y,-y,-z+1/2 + - x,x-y,-z+1/2 + - y,x,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z-1/2 + - -x+y,y,z-1/2 + - -x,-x+y,z-1/2 + - -y,-x,z-1/2 + - x-y,-y,z-1/2 + - x,x-y,z-1/2 + number: 192 + schoenflies: D6h^2 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z+1/2 + - x-y,-y,-z+1/2 + - x,x-y,-z+1/2 + - y,x,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z-1/2 + - -x+y,y,z-1/2 + - -x,-x+y,z-1/2 + - -y,-x,z-1/2 + - x-y,-y,z-1/2 + - x,x-y,z-1/2 + universal_h_m: P 6/m c c +- crystal_class: hexagonal + hall: -P 6c 2 + hermann_mauguin: P 63/m c m + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z + - x-y,-y,-z+1/2 + - x,x-y,-z + - y,x,-z+1/2 + - -x+y,y,-z + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + - y,x,z + - -x+y,y,z-1/2 + - -x,-x+y,z + - -y,-x,z-1/2 + - x-y,-y,z + - x,x-y,z-1/2 + number: 193 + schoenflies: D6h^3 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z + - x-y,-y,-z+1/2 + - x,x-y,-z + - y,x,-z+1/2 + - -x+y,y,-z + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + - y,x,z + - -x+y,y,z-1/2 + - -x,-x+y,z + - -y,-x,z-1/2 + - x-y,-y,z + - x,x-y,z-1/2 + universal_h_m: P 63/m c m +- crystal_class: hexagonal + hall: -P 6c 2c + hermann_mauguin: P 63/m m c + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + - y,x,z-1/2 + - -x+y,y,z + - -x,-x+y,z-1/2 + - -y,-x,z + - x-y,-y,z-1/2 + - x,x-y,z + number: 194 + schoenflies: D6h^4 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z-1/2 + - y,-x+y,-z + - x,y,-z-1/2 + - x-y,x,-z + - -y,x-y,-z-1/2 + - y,x,z-1/2 + - -x+y,y,z + - -x,-x+y,z-1/2 + - -y,-x,z + - x-y,-y,z-1/2 + - x,x-y,z + universal_h_m: P 63/m m c +- crystal_class: cubic + hall: " P 2 2 3" + hermann_mauguin: P 2 3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + number: 195 + schoenflies: T^1 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + universal_h_m: P 2 3 +- crystal_class: cubic + hall: " F 2 2 3" + hermann_mauguin: F 2 3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + number: 196 + schoenflies: T^2 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - z,-x+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - z+1/2,x,y+1/2 + - -z+1/2,-x,y+1/2 + - z+1/2,-x,-y+1/2 + - -z+1/2,x,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z,x+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - z+1/2,x+1/2,y + - -z+1/2,-x+1/2,y + - z+1/2,-x+1/2,-y + - -z+1/2,x+1/2,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - -y+1/2,z+1/2,-x + - -y+1/2,-z+1/2,x + universal_h_m: F 2 3 +- crystal_class: cubic + hall: " I 2 2 3" + hermann_mauguin: I 2 3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + number: 197 + schoenflies: T^3 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - z+1/2,x+1/2,y+1/2 + - -z+1/2,-x+1/2,y+1/2 + - z+1/2,-x+1/2,-y+1/2 + - -z+1/2,x+1/2,-y+1/2 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,-x+1/2 + - -y+1/2,-z+1/2,x+1/2 + universal_h_m: I 2 3 +- crystal_class: cubic + hall: " P 2ac 2ab 3" + hermann_mauguin: P 21 3 + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - z,x,y + - -z+1/2,-x,y+1/2 + - z+1/2,-x+1/2,-y + - -z,x+1/2,-y+1/2 + - y,z,x + - y+1/2,-z+1/2,-x + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + number: 198 + schoenflies: T^4 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - z,x,y + - -z+1/2,-x,y+1/2 + - z+1/2,-x+1/2,-y + - -z,x+1/2,-y+1/2 + - y,z,x + - y+1/2,-z+1/2,-x + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + universal_h_m: P 21 3 +- crystal_class: cubic + hall: " I 2b 2c 3" + hermann_mauguin: I 21 3 + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x,y + - -z,-x+1/2,y + - z,-x,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z,x + - y,-z,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + number: 199 + schoenflies: T^5 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x,y + - -z,-x+1/2,y + - z,-x,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z,x + - y,-z,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1,-z+1 + - z+1/2,x+1/2,y+1/2 + - -z+1/2,-x+1,y+1/2 + - z+1/2,-x+1/2,-y+1 + - -z+1/2,x+1,-y+1 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - -y+1/2,z+1,-x+1 + - -y+1,-z+1/2,x+1 + universal_h_m: I 21 3 +- crystal_class: cubic + hall: -P 2 2 3 + hermann_mauguin: P m -3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + number: 200 + schoenflies: Th^1 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + universal_h_m: P m -3 +- crystal_class: cubic + hall: " P 2 2 3 -1n" + hermann_mauguin: P n -3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + number: 201 + schoenflies: Th^2 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + universal_h_m: P n -3 :1 +- crystal_class: cubic + hall: -P 2ab 2bc 3 + hermann_mauguin: P n -3 + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - z,x,y + - -z+1/2,-x+1/2,y + - z,-x+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z+1/2,x + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + - -z,-x,-y + - z-1/2,x-1/2,-y + - -z,x-1/2,y-1/2 + - z-1/2,-x,y-1/2 + - -y,-z,-x + - -y,z-1/2,x-1/2 + - y-1/2,-z,x-1/2 + - y-1/2,z-1/2,-x + number: 201 + schoenflies: Th^2 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - z,x,y + - -z+1/2,-x+1/2,y + - z,-x+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z+1/2,x + - -x,-y,-z + - x-1/2,y-1/2,-z + - -x,y-1/2,z-1/2 + - x-1/2,-y,z-1/2 + - -z,-x,-y + - z-1/2,x-1/2,-y + - -z,x-1/2,y-1/2 + - z-1/2,-x,y-1/2 + - -y,-z,-x + - -y,z-1/2,x-1/2 + - y-1/2,-z,x-1/2 + - y-1/2,z-1/2,-x + universal_h_m: P n -3 :2 +- crystal_class: cubic + hall: -F 2 2 3 + hermann_mauguin: F m -3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + number: 202 + schoenflies: Th^3 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - z,-x+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - -z,-x+1/2,-y+1/2 + - z,x+1/2,-y+1/2 + - -z,x+1/2,y+1/2 + - z,-x+1/2,y+1/2 + - -y,-z+1/2,-x+1/2 + - -y,z+1/2,x+1/2 + - y,-z+1/2,x+1/2 + - y,z+1/2,-x+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - z+1/2,x,y+1/2 + - -z+1/2,-x,y+1/2 + - z+1/2,-x,-y+1/2 + - -z+1/2,x,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + - -z+1/2,-x,-y+1/2 + - z+1/2,x,-y+1/2 + - -z+1/2,x,y+1/2 + - z+1/2,-x,y+1/2 + - -y+1/2,-z,-x+1/2 + - -y+1/2,z,x+1/2 + - y+1/2,-z,x+1/2 + - y+1/2,z,-x+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - z+1/2,x+1/2,y + - -z+1/2,-x+1/2,y + - z+1/2,-x+1/2,-y + - -z+1/2,x+1/2,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - -y+1/2,z+1/2,-x + - -y+1/2,-z+1/2,x + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - -z+1/2,-x+1/2,-y + - z+1/2,x+1/2,-y + - -z+1/2,x+1/2,y + - z+1/2,-x+1/2,y + - -y+1/2,-z+1/2,-x + - -y+1/2,z+1/2,x + - y+1/2,-z+1/2,x + - y+1/2,z+1/2,-x + universal_h_m: F m -3 +- crystal_class: cubic + hall: " F 2 2 3 -1d" + hermann_mauguin: F d -3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x+1/4,-y+1/4,-z+1/4 + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - x+1/4,-y+1/4,z+1/4 + - -z+1/4,-x+1/4,-y+1/4 + - z+1/4,x+1/4,-y+1/4 + - -z+1/4,x+1/4,y+1/4 + - z+1/4,-x+1/4,y+1/4 + - -y+1/4,-z+1/4,-x+1/4 + - -y+1/4,z+1/4,x+1/4 + - y+1/4,-z+1/4,x+1/4 + - y+1/4,z+1/4,-x+1/4 + number: 203 + schoenflies: Th^4 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x+1/4,-y+1/4,-z+1/4 + - x+1/4,y+1/4,-z+1/4 + - -x+1/4,y+1/4,z+1/4 + - x+1/4,-y+1/4,z+1/4 + - -z+1/4,-x+1/4,-y+1/4 + - z+1/4,x+1/4,-y+1/4 + - -z+1/4,x+1/4,y+1/4 + - z+1/4,-x+1/4,y+1/4 + - -y+1/4,-z+1/4,-x+1/4 + - -y+1/4,z+1/4,x+1/4 + - y+1/4,-z+1/4,x+1/4 + - y+1/4,z+1/4,-x+1/4 + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - z,-x+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - -x+1/4,-y+3/4,-z+3/4 + - x+1/4,y+3/4,-z+3/4 + - -x+1/4,y+3/4,z+3/4 + - x+1/4,-y+3/4,z+3/4 + - -z+1/4,-x+3/4,-y+3/4 + - z+1/4,x+3/4,-y+3/4 + - -z+1/4,x+3/4,y+3/4 + - z+1/4,-x+3/4,y+3/4 + - -y+1/4,-z+3/4,-x+3/4 + - -y+1/4,z+3/4,x+3/4 + - y+1/4,-z+3/4,x+3/4 + - y+1/4,z+3/4,-x+3/4 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - z+1/2,x,y+1/2 + - -z+1/2,-x,y+1/2 + - z+1/2,-x,-y+1/2 + - -z+1/2,x,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x+3/4,-y+1/4,-z+3/4 + - x+3/4,y+1/4,-z+3/4 + - -x+3/4,y+1/4,z+3/4 + - x+3/4,-y+1/4,z+3/4 + - -z+3/4,-x+1/4,-y+3/4 + - z+3/4,x+1/4,-y+3/4 + - -z+3/4,x+1/4,y+3/4 + - z+3/4,-x+1/4,y+3/4 + - -y+3/4,-z+1/4,-x+3/4 + - -y+3/4,z+1/4,x+3/4 + - y+3/4,-z+1/4,x+3/4 + - y+3/4,z+1/4,-x+3/4 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - z+1/2,x+1/2,y + - -z+1/2,-x+1/2,y + - z+1/2,-x+1/2,-y + - -z+1/2,x+1/2,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - -y+1/2,z+1/2,-x + - -y+1/2,-z+1/2,x + - -x+3/4,-y+3/4,-z+1/4 + - x+3/4,y+3/4,-z+1/4 + - -x+3/4,y+3/4,z+1/4 + - x+3/4,-y+3/4,z+1/4 + - -z+3/4,-x+3/4,-y+1/4 + - z+3/4,x+3/4,-y+1/4 + - -z+3/4,x+3/4,y+1/4 + - z+3/4,-x+3/4,y+1/4 + - -y+3/4,-z+3/4,-x+1/4 + - -y+3/4,z+3/4,x+1/4 + - y+3/4,-z+3/4,x+1/4 + - y+3/4,z+3/4,-x+1/4 + universal_h_m: F d -3 :1 +- crystal_class: cubic + hall: -F 2uv 2vw 3 + hermann_mauguin: F d -3 + ncsym: + - x,y,z + - -x+1/4,-y+1/4,z + - x,-y+1/4,-z+1/4 + - -x+1/4,y,-z+1/4 + - z,x,y + - -z+1/4,-x+1/4,y + - z,-x+1/4,-y+1/4 + - -z+1/4,x,-y+1/4 + - y,z,x + - y,-z+1/4,-x+1/4 + - -y+1/4,z,-x+1/4 + - -y+1/4,-z+1/4,x + - -x,-y,-z + - x-1/4,y-1/4,-z + - -x,y-1/4,z-1/4 + - x-1/4,-y,z-1/4 + - -z,-x,-y + - z-1/4,x-1/4,-y + - -z,x-1/4,y-1/4 + - z-1/4,-x,y-1/4 + - -y,-z,-x + - -y,z-1/4,x-1/4 + - y-1/4,-z,x-1/4 + - y-1/4,z-1/4,-x + number: 203 + schoenflies: Th^4 + symops: + - x,y,z + - -x+1/4,-y+1/4,z + - x,-y+1/4,-z+1/4 + - -x+1/4,y,-z+1/4 + - z,x,y + - -z+1/4,-x+1/4,y + - z,-x+1/4,-y+1/4 + - -z+1/4,x,-y+1/4 + - y,z,x + - y,-z+1/4,-x+1/4 + - -y+1/4,z,-x+1/4 + - -y+1/4,-z+1/4,x + - -x,-y,-z + - x-1/4,y-1/4,-z + - -x,y-1/4,z-1/4 + - x-1/4,-y,z-1/4 + - -z,-x,-y + - z-1/4,x-1/4,-y + - -z,x-1/4,y-1/4 + - z-1/4,-x,y-1/4 + - -y,-z,-x + - -y,z-1/4,x-1/4 + - y-1/4,-z,x-1/4 + - y-1/4,z-1/4,-x + - x,y+1/2,z+1/2 + - -x+1/4,-y+3/4,z+1/2 + - x,-y+3/4,-z+3/4 + - -x+1/4,y+1/2,-z+3/4 + - z,x+1/2,y+1/2 + - -z+1/4,-x+3/4,y+1/2 + - z,-x+3/4,-y+3/4 + - -z+1/4,x+1/2,-y+3/4 + - y,z+1/2,x+1/2 + - y,-z+3/4,-x+3/4 + - -y+1/4,z+1/2,-x+3/4 + - -y+1/4,-z+3/4,x+1/2 + - -x,-y+1/2,-z+1/2 + - x-1/4,y+1/4,-z+1/2 + - -x,y+1/4,z+1/4 + - x-1/4,-y+1/2,z+1/4 + - -z,-x+1/2,-y+1/2 + - z-1/4,x+1/4,-y+1/2 + - -z,x+1/4,y+1/4 + - z-1/4,-x+1/2,y+1/4 + - -y,-z+1/2,-x+1/2 + - -y,z+1/4,x+1/4 + - y-1/4,-z+1/2,x+1/4 + - y-1/4,z+1/4,-x+1/2 + - x+1/2,y,z+1/2 + - -x+3/4,-y+1/4,z+1/2 + - x+1/2,-y+1/4,-z+3/4 + - -x+3/4,y,-z+3/4 + - z+1/2,x,y+1/2 + - -z+3/4,-x+1/4,y+1/2 + - z+1/2,-x+1/4,-y+3/4 + - -z+3/4,x,-y+3/4 + - y+1/2,z,x+1/2 + - y+1/2,-z+1/4,-x+3/4 + - -y+3/4,z,-x+3/4 + - -y+3/4,-z+1/4,x+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/4,y-1/4,-z+1/2 + - -x+1/2,y-1/4,z+1/4 + - x+1/4,-y,z+1/4 + - -z+1/2,-x,-y+1/2 + - z+1/4,x-1/4,-y+1/2 + - -z+1/2,x-1/4,y+1/4 + - z+1/4,-x,y+1/4 + - -y+1/2,-z,-x+1/2 + - -y+1/2,z-1/4,x+1/4 + - y+1/4,-z,x+1/4 + - y+1/4,z-1/4,-x+1/2 + - x+1/2,y+1/2,z + - -x+3/4,-y+3/4,z + - x+1/2,-y+3/4,-z+1/4 + - -x+3/4,y+1/2,-z+1/4 + - z+1/2,x+1/2,y + - -z+3/4,-x+3/4,y + - z+1/2,-x+3/4,-y+1/4 + - -z+3/4,x+1/2,-y+1/4 + - y+1/2,z+1/2,x + - y+1/2,-z+3/4,-x+1/4 + - -y+3/4,z+1/2,-x+1/4 + - -y+3/4,-z+3/4,x + - -x+1/2,-y+1/2,-z + - x+1/4,y+1/4,-z + - -x+1/2,y+1/4,z-1/4 + - x+1/4,-y+1/2,z-1/4 + - -z+1/2,-x+1/2,-y + - z+1/4,x+1/4,-y + - -z+1/2,x+1/4,y-1/4 + - z+1/4,-x+1/2,y-1/4 + - -y+1/2,-z+1/2,-x + - -y+1/2,z+1/4,x-1/4 + - y+1/4,-z+1/2,x-1/4 + - y+1/4,z+1/4,-x + universal_h_m: F d -3 :2 +- crystal_class: cubic + hall: -I 2 2 3 + hermann_mauguin: I m -3 + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + number: 204 + schoenflies: Th^5 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x,-y,-z + - x,y,-z + - -x,y,z + - x,-y,z + - -z,-x,-y + - z,x,-y + - -z,x,y + - z,-x,y + - -y,-z,-x + - -y,z,x + - y,-z,x + - y,z,-x + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - z+1/2,x+1/2,y+1/2 + - -z+1/2,-x+1/2,y+1/2 + - z+1/2,-x+1/2,-y+1/2 + - -z+1/2,x+1/2,-y+1/2 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,-x+1/2 + - -y+1/2,-z+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + universal_h_m: I m -3 +- crystal_class: cubic + hall: -P 2ac 2ab 3 + hermann_mauguin: P a -3 + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - z,x,y + - -z+1/2,-x,y+1/2 + - z+1/2,-x+1/2,-y + - -z,x+1/2,-y+1/2 + - y,z,x + - y+1/2,-z+1/2,-x + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y-1/2,z-1/2 + - -z,-x,-y + - z-1/2,x,-y-1/2 + - -z-1/2,x-1/2,y + - z,-x-1/2,y-1/2 + - -y,-z,-x + - -y-1/2,z-1/2,x + - y,-z-1/2,x-1/2 + - y-1/2,z,-x-1/2 + number: 205 + schoenflies: Th^6 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z+1/2 + - z,x,y + - -z+1/2,-x,y+1/2 + - z+1/2,-x+1/2,-y + - -z,x+1/2,-y+1/2 + - y,z,x + - y+1/2,-z+1/2,-x + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x,-y,-z + - x-1/2,y,-z-1/2 + - -x-1/2,y-1/2,z + - x,-y-1/2,z-1/2 + - -z,-x,-y + - z-1/2,x,-y-1/2 + - -z-1/2,x-1/2,y + - z,-x-1/2,y-1/2 + - -y,-z,-x + - -y-1/2,z-1/2,x + - y,-z-1/2,x-1/2 + - y-1/2,z,-x-1/2 + universal_h_m: P a -3 +- crystal_class: cubic + hall: -I 2b 2c 3 + hermann_mauguin: I a -3 + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x,y + - -z,-x+1/2,y + - z,-x,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z,x + - y,-z,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + - -z,-x,-y + - z,x-1/2,-y + - -z,x,y-1/2 + - z,-x-1/2,y-1/2 + - -y,-z,-x + - -y,z,x-1/2 + - y,-z-1/2,x-1/2 + - y-1/2,z,-x-1/2 + number: 206 + schoenflies: Th^7 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - z,x,y + - -z,-x+1/2,y + - z,-x,-y+1/2 + - -z,x+1/2,-y+1/2 + - y,z,x + - y,-z,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y+1/2,-z,x+1/2 + - -x,-y,-z + - x,y-1/2,-z + - -x,y,z-1/2 + - x,-y-1/2,z-1/2 + - -z,-x,-y + - z,x-1/2,-y + - -z,x,y-1/2 + - z,-x-1/2,y-1/2 + - -y,-z,-x + - -y,z,x-1/2 + - y,-z-1/2,x-1/2 + - y-1/2,z,-x-1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - x+1/2,-y+1/2,-z+1 + - -x+1/2,y+1,-z+1 + - z+1/2,x+1/2,y+1/2 + - -z+1/2,-x+1,y+1/2 + - z+1/2,-x+1/2,-y+1 + - -z+1/2,x+1,-y+1 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - -y+1/2,z+1,-x+1 + - -y+1,-z+1/2,x+1 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y,z + - -z+1/2,-x+1/2,-y+1/2 + - z+1/2,x,-y+1/2 + - -z+1/2,x+1/2,y + - z+1/2,-x,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x + - y+1/2,-z,x + - y,z+1/2,-x + universal_h_m: I a -3 +- crystal_class: cubic + hall: " P 4 2 3" + hermann_mauguin: P 4 3 2 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + number: 207 + schoenflies: O^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + universal_h_m: P 4 3 2 +- crystal_class: cubic + hall: " P 4n 2 3" + hermann_mauguin: P 42 3 2 + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + number: 208 + schoenflies: O^2 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + universal_h_m: P 42 3 2 +- crystal_class: cubic + hall: " F 4 2 3" + hermann_mauguin: F 4 3 2 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + number: 209 + schoenflies: O^3 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -x,z+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - x,-z+1/2,y+1/2 + - z,-x+1/2,-y+1/2 + - x,z+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - -x,-z+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - z,y+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -z,-y+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - z,-y+1/2,x+1/2 + - -z,y+1/2,x+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x,-z+1/2 + - z+1/2,x,y+1/2 + - -x+1/2,z,y+1/2 + - -z+1/2,-x,y+1/2 + - x+1/2,-z,y+1/2 + - z+1/2,-x,-y+1/2 + - x+1/2,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - z+1/2,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y,-x+1/2 + - -y+1/2,-z,x+1/2 + - z+1/2,-y,x+1/2 + - -z+1/2,y,x+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z + - z+1/2,x+1/2,y + - -x+1/2,z+1/2,y + - -z+1/2,-x+1/2,y + - x+1/2,-z+1/2,y + - z+1/2,-x+1/2,-y + - x+1/2,z+1/2,-y + - -z+1/2,x+1/2,-y + - -x+1/2,-z+1/2,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - z+1/2,y+1/2,-x + - -y+1/2,z+1/2,-x + - -z+1/2,-y+1/2,-x + - -y+1/2,-z+1/2,x + - z+1/2,-y+1/2,x + - -z+1/2,y+1/2,x + universal_h_m: F 4 3 2 +- crystal_class: cubic + hall: " F 4d 2 3" + hermann_mauguin: F 41 3 2 + ncsym: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + number: 210 + schoenflies: O^4 + symops: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + - x,y+1/2,z+1/2 + - -y+1/4,x+3/4,z+3/4 + - -x,-y+1,z+1 + - y+3/4,-x+3/4,z+5/4 + - x,-y+1/2,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x,y+1,-z+1 + - -y+3/4,-x+3/4,-z+5/4 + - z,x+1/2,y+1/2 + - -x+1/4,z+3/4,y+3/4 + - -z,-x+1,y+1 + - x+3/4,-z+3/4,y+5/4 + - z,-x+1/2,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z,x+1,-y+1 + - -x+3/4,-z+3/4,-y+5/4 + - y,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - z+1/4,y+5/4,-x+5/4 + - -y+1/2,z+1,-x+1/2 + - -z+1/4,-y+3/4,-x+3/4 + - -y,-z+1/2,x+1/2 + - z+1/4,-y+5/4,x+5/4 + - -z+3/4,y+5/4,x+3/4 + - x+1/2,y,z+1/2 + - -y+3/4,x+1/4,z+3/4 + - -x+1/2,-y+1/2,z+1 + - y+5/4,-x+1/4,z+5/4 + - x+1/2,-y,-z+1/2 + - y+3/4,x+1/4,-z+3/4 + - -x+1/2,y+1/2,-z+1 + - -y+5/4,-x+1/4,-z+5/4 + - z+1/2,x,y+1/2 + - -x+3/4,z+1/4,y+3/4 + - -z+1/2,-x+1/2,y+1 + - x+5/4,-z+1/4,y+5/4 + - z+1/2,-x,-y+1/2 + - x+3/4,z+1/4,-y+3/4 + - -z+1/2,x+1/2,-y+1 + - -x+5/4,-z+1/4,-y+5/4 + - y+1/2,z,x+1/2 + - y+1,-z,-x+1 + - z+3/4,y+3/4,-x+5/4 + - -y+1,z+1/2,-x+1/2 + - -z+3/4,-y+1/4,-x+3/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+5/4 + - -z+5/4,y+3/4,x+3/4 + - x+1/2,y+1/2,z + - -y+3/4,x+3/4,z+1/4 + - -x+1/2,-y+1,z+1/2 + - y+5/4,-x+3/4,z+3/4 + - x+1/2,-y+1/2,-z + - y+3/4,x+3/4,-z+1/4 + - -x+1/2,y+1,-z+1/2 + - -y+5/4,-x+3/4,-z+3/4 + - z+1/2,x+1/2,y + - -x+3/4,z+3/4,y+1/4 + - -z+1/2,-x+1,y+1/2 + - x+5/4,-z+3/4,y+3/4 + - z+1/2,-x+1/2,-y + - x+3/4,z+3/4,-y+1/4 + - -z+1/2,x+1,-y+1/2 + - -x+5/4,-z+3/4,-y+3/4 + - y+1/2,z+1/2,x + - y+1,-z+1/2,-x+1/2 + - z+3/4,y+5/4,-x+3/4 + - -y+1,z+1,-x + - -z+3/4,-y+3/4,-x+1/4 + - -y+1/2,-z+1/2,x + - z+3/4,-y+5/4,x+3/4 + - -z+5/4,y+5/4,x+1/4 + universal_h_m: F 41 3 2 +- crystal_class: cubic + hall: " I 4 2 3" + hermann_mauguin: I 4 3 2 + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + number: 211 + schoenflies: O^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z+1/2,x+1/2,y+1/2 + - -x+1/2,z+1/2,y+1/2 + - -z+1/2,-x+1/2,y+1/2 + - x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,-y+1/2 + - x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1/2 + - z+1/2,y+1/2,-x+1/2 + - -y+1/2,z+1/2,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x+1/2 + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + universal_h_m: I 4 3 2 +- crystal_class: cubic + hall: " P 4acd 2ab 3" + hermann_mauguin: P 43 3 2 + ncsym: + - x,y,z + - -y+3/4,x+1/4,z+3/4 + - -x+1/2,-y,z+1/2 + - y+3/4,-x+3/4,z+1/4 + - x+1/2,-y+1/2,-z + - y+1/4,x+3/4,-z+3/4 + - -x,y+1/2,-z+1/2 + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+3/4,z+1/4,y+3/4 + - -z+1/2,-x,y+1/2 + - x+3/4,-z+3/4,y+1/4 + - z+1/2,-x+1/2,-y + - x+1/4,z+3/4,-y+3/4 + - -z,x+1/2,-y+1/2 + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+1/4,y+3/4,-x+3/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + number: 212 + schoenflies: O^6 + symops: + - x,y,z + - -y+3/4,x+1/4,z+3/4 + - -x+1/2,-y,z+1/2 + - y+3/4,-x+3/4,z+1/4 + - x+1/2,-y+1/2,-z + - y+1/4,x+3/4,-z+3/4 + - -x,y+1/2,-z+1/2 + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+3/4,z+1/4,y+3/4 + - -z+1/2,-x,y+1/2 + - x+3/4,-z+3/4,y+1/4 + - z+1/2,-x+1/2,-y + - x+1/4,z+3/4,-y+3/4 + - -z,x+1/2,-y+1/2 + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+1/4,y+3/4,-x+3/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + universal_h_m: P 43 3 2 +- crystal_class: cubic + hall: " P 4bd 2ab 3" + hermann_mauguin: P 41 3 2 + ncsym: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x+1/2,-y+1/2,-z + - y+3/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+3/4,-z+3/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z+1/2,-x+1/2,-y + - x+3/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+3/4,-y+3/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+3/4,-y+3/4,-x+3/4 + - -y+1/2,-z,x+1/2 + - z+1/4,-y+1/4,x+3/4 + - -z+1/4,y+3/4,x+1/4 + number: 213 + schoenflies: O^7 + symops: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x+1/2,-y+1/2,-z + - y+3/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+3/4,-z+3/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z+1/2,-x+1/2,-y + - x+3/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+3/4,-y+3/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+3/4,-y+3/4,-x+3/4 + - -y+1/2,-z,x+1/2 + - z+1/4,-y+1/4,x+3/4 + - -z+1/4,y+3/4,x+1/4 + universal_h_m: P 41 3 2 +- crystal_class: cubic + hall: " I 4bd 2c 3" + hermann_mauguin: I 41 3 2 + ncsym: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z,-x,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z+1/2,x,-y + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + number: 214 + schoenflies: O^8 + symops: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z,-x,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z+1/2,x,-y + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + - x+1/2,y+1/2,z+1/2 + - -y+3/4,x+5/4,z+3/4 + - -x+1,-y+1/2,z+1 + - y+3/4,-x+3/4,z+5/4 + - x+1/2,-y+1/2,-z+1 + - y+3/4,x+5/4,-z+5/4 + - -x+1,y+1/2,-z+1/2 + - -y+3/4,-x+3/4,-z+3/4 + - z+1/2,x+1/2,y+1/2 + - -x+3/4,z+5/4,y+3/4 + - -z+1,-x+1/2,y+1 + - x+3/4,-z+3/4,y+5/4 + - z+1/2,-x+1/2,-y+1 + - x+3/4,z+5/4,-y+5/4 + - -z+1,x+1/2,-y+1/2 + - -x+3/4,-z+3/4,-y+3/4 + - y+1/2,z+1/2,x+1/2 + - y+1,-z+1,-x+1/2 + - z+5/4,y+3/4,-x+3/4 + - -y+1/2,z+1,-x+1 + - -z+3/4,-y+3/4,-x+3/4 + - -y+1,-z+1/2,x+1 + - z+5/4,-y+5/4,x+3/4 + - -z+5/4,y+3/4,x+5/4 + universal_h_m: I 41 3 2 +- crystal_class: cubic + hall: " P -4 2 3" + hermann_mauguin: P -4 3 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + number: 215 + schoenflies: Td^1 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + universal_h_m: P -4 3 m +- crystal_class: cubic + hall: " F -4 2 3" + hermann_mauguin: F -4 3 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + number: 216 + schoenflies: Td^2 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + - x,y+1/2,z+1/2 + - y,-x+1/2,-z+1/2 + - -x,-y+1/2,z+1/2 + - -y,x+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - -y,-x+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - y,x+1/2,z+1/2 + - z,x+1/2,y+1/2 + - x,-z+1/2,-y+1/2 + - -z,-x+1/2,y+1/2 + - -x,z+1/2,-y+1/2 + - z,-x+1/2,-y+1/2 + - -x,-z+1/2,y+1/2 + - -z,x+1/2,-y+1/2 + - x,z+1/2,y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - -z,-y+1/2,x+1/2 + - -y,z+1/2,-x+1/2 + - z,y+1/2,x+1/2 + - -y,-z+1/2,x+1/2 + - -z,y+1/2,-x+1/2 + - z,-y+1/2,-x+1/2 + - x+1/2,y,z+1/2 + - y+1/2,-x,-z+1/2 + - -x+1/2,-y,z+1/2 + - -y+1/2,x,-z+1/2 + - x+1/2,-y,-z+1/2 + - -y+1/2,-x,z+1/2 + - -x+1/2,y,-z+1/2 + - y+1/2,x,z+1/2 + - z+1/2,x,y+1/2 + - x+1/2,-z,-y+1/2 + - -z+1/2,-x,y+1/2 + - -x+1/2,z,-y+1/2 + - z+1/2,-x,-y+1/2 + - -x+1/2,-z,y+1/2 + - -z+1/2,x,-y+1/2 + - x+1/2,z,y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - -z+1/2,-y,x+1/2 + - -y+1/2,z,-x+1/2 + - z+1/2,y,x+1/2 + - -y+1/2,-z,x+1/2 + - -z+1/2,y,-x+1/2 + - z+1/2,-y,-x+1/2 + - x+1/2,y+1/2,z + - y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,z + - -y+1/2,x+1/2,-z + - x+1/2,-y+1/2,-z + - -y+1/2,-x+1/2,z + - -x+1/2,y+1/2,-z + - y+1/2,x+1/2,z + - z+1/2,x+1/2,y + - x+1/2,-z+1/2,-y + - -z+1/2,-x+1/2,y + - -x+1/2,z+1/2,-y + - z+1/2,-x+1/2,-y + - -x+1/2,-z+1/2,y + - -z+1/2,x+1/2,-y + - x+1/2,z+1/2,y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - -z+1/2,-y+1/2,x + - -y+1/2,z+1/2,-x + - z+1/2,y+1/2,x + - -y+1/2,-z+1/2,x + - -z+1/2,y+1/2,-x + - z+1/2,-y+1/2,-x + universal_h_m: F -4 3 m +- crystal_class: cubic + hall: " I -4 2 3" + hermann_mauguin: I -4 3 m + ncsym: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + number: 217 + schoenflies: Td^3 + symops: + - x,y,z + - y,-x,-z + - -x,-y,z + - -y,x,-z + - x,-y,-z + - -y,-x,z + - -x,y,-z + - y,x,z + - z,x,y + - x,-z,-y + - -z,-x,y + - -x,z,-y + - z,-x,-y + - -x,-z,y + - -z,x,-y + - x,z,y + - y,z,x + - y,-z,-x + - -z,-y,x + - -y,z,-x + - z,y,x + - -y,-z,x + - -z,y,-x + - z,-y,-x + - x+1/2,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - z+1/2,x+1/2,y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - -z+1/2,-x+1/2,y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - z+1/2,-x+1/2,-y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - -z+1/2,x+1/2,-y+1/2 + - x+1/2,z+1/2,y+1/2 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - -y+1/2,z+1/2,-x+1/2 + - z+1/2,y+1/2,x+1/2 + - -y+1/2,-z+1/2,x+1/2 + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + universal_h_m: I -4 3 m +- crystal_class: cubic + hall: " P -4n 2 3" + hermann_mauguin: P -4 3 n + ncsym: + - x,y,z + - y+1/2,-x+1/2,-z+1/2 + - -x,-y,z + - -y+1/2,x+1/2,-z+1/2 + - x,-y,-z + - -y+1/2,-x+1/2,z+1/2 + - -x,y,-z + - y+1/2,x+1/2,z+1/2 + - z,x,y + - x+1/2,-z+1/2,-y+1/2 + - -z,-x,y + - -x+1/2,z+1/2,-y+1/2 + - z,-x,-y + - -x+1/2,-z+1/2,y+1/2 + - -z,x,-y + - x+1/2,z+1/2,y+1/2 + - y,z,x + - y,-z,-x + - -z+1/2,-y+1/2,x+1/2 + - -y,z,-x + - z+1/2,y+1/2,x+1/2 + - -y,-z,x + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + number: 218 + schoenflies: Td^4 + symops: + - x,y,z + - y+1/2,-x+1/2,-z+1/2 + - -x,-y,z + - -y+1/2,x+1/2,-z+1/2 + - x,-y,-z + - -y+1/2,-x+1/2,z+1/2 + - -x,y,-z + - y+1/2,x+1/2,z+1/2 + - z,x,y + - x+1/2,-z+1/2,-y+1/2 + - -z,-x,y + - -x+1/2,z+1/2,-y+1/2 + - z,-x,-y + - -x+1/2,-z+1/2,y+1/2 + - -z,x,-y + - x+1/2,z+1/2,y+1/2 + - y,z,x + - y,-z,-x + - -z+1/2,-y+1/2,x+1/2 + - -y,z,-x + - z+1/2,y+1/2,x+1/2 + - -y,-z,x + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + universal_h_m: P -4 3 n +- crystal_class: cubic + hall: " F -4a 2 3" + hermann_mauguin: F -4 3 c + ncsym: + - x,y,z + - y+1/2,-x,-z + - -x+1/2,-y+1/2,z + - -y,x+1/2,-z + - x,-y,-z + - -y+1/2,-x,z + - -x+1/2,y+1/2,-z + - y,x+1/2,z + - z,x,y + - x+1/2,-z,-y + - -z+1/2,-x+1/2,y + - -x,z+1/2,-y + - z,-x,-y + - -x+1/2,-z,y + - -z+1/2,x+1/2,-y + - x,z+1/2,y + - y,z,x + - y,-z+1/2,-x+1/2 + - -z,-y,x+1/2 + - -y+1/2,z,-x+1/2 + - z+1/2,y,x + - -y,-z,x + - -z,y,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + number: 219 + schoenflies: Td^5 + symops: + - x,y,z + - y+1/2,-x,-z + - -x+1/2,-y+1/2,z + - -y,x+1/2,-z + - x,-y,-z + - -y+1/2,-x,z + - -x+1/2,y+1/2,-z + - y,x+1/2,z + - z,x,y + - x+1/2,-z,-y + - -z+1/2,-x+1/2,y + - -x,z+1/2,-y + - z,-x,-y + - -x+1/2,-z,y + - -z+1/2,x+1/2,-y + - x,z+1/2,y + - y,z,x + - y,-z+1/2,-x+1/2 + - -z,-y,x+1/2 + - -y+1/2,z,-x+1/2 + - z+1/2,y,x + - -y,-z,x + - -z,y,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + - x,y+1/2,z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1,z+1/2 + - -y,x+1,-z+1/2 + - x,-y+1/2,-z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - -x+1/2,y+1,-z+1/2 + - y,x+1,z+1/2 + - z,x+1/2,y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - -z+1/2,-x+1,y+1/2 + - -x,z+1,-y+1/2 + - z,-x+1/2,-y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - -z+1/2,x+1,-y+1/2 + - x,z+1,y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1,-x+1 + - -z,-y+1/2,x+1 + - -y+1/2,z+1/2,-x+1 + - z+1/2,y+1/2,x+1/2 + - -y,-z+1/2,x+1/2 + - -z,y+1/2,-x+1 + - z+1/2,-y+1,-x+1 + - x+1/2,y,z+1/2 + - y+1,-x,-z+1/2 + - -x+1,-y+1/2,z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x+1/2,-y,-z+1/2 + - -y+1,-x,z+1/2 + - -x+1,y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - z+1/2,x,y+1/2 + - x+1,-z,-y+1/2 + - -z+1,-x+1/2,y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - z+1/2,-x,-y+1/2 + - -x+1,-z,y+1/2 + - -z+1,x+1/2,-y+1/2 + - x+1/2,z+1/2,y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z+1/2,-x+1 + - -z+1/2,-y,x+1 + - -y+1,z,-x+1 + - z+1,y,x+1/2 + - -y+1/2,-z,x+1/2 + - -z+1/2,y,-x+1 + - z+1,-y+1/2,-x+1 + - x+1/2,y+1/2,z + - y+1,-x+1/2,-z + - -x+1,-y+1,z + - -y+1/2,x+1,-z + - x+1/2,-y+1/2,-z + - -y+1,-x+1/2,z + - -x+1,y+1,-z + - y+1/2,x+1,z + - z+1/2,x+1/2,y + - x+1,-z+1/2,-y + - -z+1,-x+1,y + - -x+1/2,z+1,-y + - z+1/2,-x+1/2,-y + - -x+1,-z+1/2,y + - -z+1,x+1,-y + - x+1/2,z+1,y + - y+1/2,z+1/2,x + - y+1/2,-z+1,-x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - -y+1,z+1/2,-x+1/2 + - z+1,y+1/2,x + - -y+1/2,-z+1/2,x + - -z+1/2,y+1/2,-x+1/2 + - z+1,-y+1,-x+1/2 + universal_h_m: F -4 3 c +- crystal_class: cubic + hall: " I -4bd 2c 3" + hermann_mauguin: I -4 3 d + ncsym: + - x,y,z + - y+1/4,-x+3/4,-z+1/4 + - -x,-y+1/2,z + - -y+3/4,x+3/4,-z+1/4 + - x,-y,-z+1/2 + - -y+1/4,-x+3/4,z+3/4 + - -x,y+1/2,-z+1/2 + - y+3/4,x+3/4,z+3/4 + - z,x,y + - x+1/4,-z+3/4,-y+1/4 + - -z,-x+1/2,y + - -x+3/4,z+3/4,-y+1/4 + - z,-x,-y+1/2 + - -x+1/4,-z+3/4,y+3/4 + - -z,x+1/2,-y+1/2 + - x+3/4,z+3/4,y+3/4 + - y,z,x + - y,-z,-x+1/2 + - -z+1/4,-y+3/4,x+3/4 + - -y,z+1/2,-x+1/2 + - z+1/4,y+1/4,x+1/4 + - -y+1/2,-z,x+1/2 + - -z+1/4,y+1/4,-x+3/4 + - z+3/4,-y+1/4,-x+3/4 + number: 220 + schoenflies: Td^6 + symops: + - x,y,z + - y+1/4,-x+3/4,-z+1/4 + - -x,-y+1/2,z + - -y+3/4,x+3/4,-z+1/4 + - x,-y,-z+1/2 + - -y+1/4,-x+3/4,z+3/4 + - -x,y+1/2,-z+1/2 + - y+3/4,x+3/4,z+3/4 + - z,x,y + - x+1/4,-z+3/4,-y+1/4 + - -z,-x+1/2,y + - -x+3/4,z+3/4,-y+1/4 + - z,-x,-y+1/2 + - -x+1/4,-z+3/4,y+3/4 + - -z,x+1/2,-y+1/2 + - x+3/4,z+3/4,y+3/4 + - y,z,x + - y,-z,-x+1/2 + - -z+1/4,-y+3/4,x+3/4 + - -y,z+1/2,-x+1/2 + - z+1/4,y+1/4,x+1/4 + - -y+1/2,-z,x+1/2 + - -z+1/4,y+1/4,-x+3/4 + - z+3/4,-y+1/4,-x+3/4 + - x+1/2,y+1/2,z+1/2 + - y+3/4,-x+5/4,-z+3/4 + - -x+1/2,-y+1,z+1/2 + - -y+5/4,x+5/4,-z+3/4 + - x+1/2,-y+1/2,-z+1 + - -y+3/4,-x+5/4,z+5/4 + - -x+1/2,y+1,-z+1 + - y+5/4,x+5/4,z+5/4 + - z+1/2,x+1/2,y+1/2 + - x+3/4,-z+5/4,-y+3/4 + - -z+1/2,-x+1,y+1/2 + - -x+5/4,z+5/4,-y+3/4 + - z+1/2,-x+1/2,-y+1 + - -x+3/4,-z+5/4,y+5/4 + - -z+1/2,x+1,-y+1 + - x+5/4,z+5/4,y+5/4 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - -z+3/4,-y+5/4,x+5/4 + - -y+1/2,z+1,-x+1 + - z+3/4,y+3/4,x+3/4 + - -y+1,-z+1/2,x+1 + - -z+3/4,y+3/4,-x+5/4 + - z+5/4,-y+3/4,-x+5/4 + universal_h_m: I -4 3 d +- crystal_class: cubic + hall: -P 4 2 3 + hermann_mauguin: P m -3 m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + number: 221 + schoenflies: Oh^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + universal_h_m: P m -3 m +- crystal_class: cubic + hall: " P 4 2 3 -1n" + hermann_mauguin: P n -3 n + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + number: 222 + schoenflies: Oh^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + universal_h_m: P n -3 n :1 +- crystal_class: cubic + hall: -P 4a 2bc 3 + hermann_mauguin: P n -3 n + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x+1/2,-y+1/2 + - x,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x + - -z+1/2,y,x + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z-1/2 + - -y,-x,z-1/2 + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z-1/2 + - -z,-x,-y + - x-1/2,-z,-y + - z-1/2,x-1/2,-y + - -x,z-1/2,-y + - -z,x-1/2,y-1/2 + - -x,-z,y-1/2 + - z-1/2,-x,y-1/2 + - x-1/2,z-1/2,y-1/2 + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z,-y,x-1/2 + - y-1/2,-z,x-1/2 + - z-1/2,y-1/2,x-1/2 + - y-1/2,z-1/2,-x + - -z,y-1/2,-x + - z-1/2,-y,-x + number: 222 + schoenflies: Oh^2 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x+1/2,-y+1/2 + - x,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x + - -z+1/2,y,x + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y-1/2,z-1/2 + - -y,-x,z-1/2 + - x-1/2,-y,z-1/2 + - y-1/2,x-1/2,z-1/2 + - -z,-x,-y + - x-1/2,-z,-y + - z-1/2,x-1/2,-y + - -x,z-1/2,-y + - -z,x-1/2,y-1/2 + - -x,-z,y-1/2 + - z-1/2,-x,y-1/2 + - x-1/2,z-1/2,y-1/2 + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z,-y,x-1/2 + - y-1/2,-z,x-1/2 + - z-1/2,y-1/2,x-1/2 + - y-1/2,z-1/2,-x + - -z,y-1/2,-x + - z-1/2,-y,-x + universal_h_m: P n -3 n :2 +- crystal_class: cubic + hall: -P 4n 2 3 + hermann_mauguin: P m -3 n + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x,-y,-z + - y-1/2,-x-1/2,-z-1/2 + - x,y,-z + - -y-1/2,x-1/2,-z-1/2 + - -x,y,z + - -y-1/2,-x-1/2,z-1/2 + - x,-y,z + - y-1/2,x-1/2,z-1/2 + - -z,-x,-y + - x-1/2,-z-1/2,-y-1/2 + - z,x,-y + - -x-1/2,z-1/2,-y-1/2 + - -z,x,y + - -x-1/2,-z-1/2,y-1/2 + - z,-x,y + - x-1/2,z-1/2,y-1/2 + - -y,-z,-x + - -y,z,x + - -z-1/2,-y-1/2,x-1/2 + - y,-z,x + - z-1/2,y-1/2,x-1/2 + - y,z,-x + - -z-1/2,y-1/2,-x-1/2 + - z-1/2,-y-1/2,-x-1/2 + number: 223 + schoenflies: Oh^3 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x,-y,-z + - y-1/2,-x-1/2,-z-1/2 + - x,y,-z + - -y-1/2,x-1/2,-z-1/2 + - -x,y,z + - -y-1/2,-x-1/2,z-1/2 + - x,-y,z + - y-1/2,x-1/2,z-1/2 + - -z,-x,-y + - x-1/2,-z-1/2,-y-1/2 + - z,x,-y + - -x-1/2,z-1/2,-y-1/2 + - -z,x,y + - -x-1/2,-z-1/2,y-1/2 + - z,-x,y + - x-1/2,z-1/2,y-1/2 + - -y,-z,-x + - -y,z,x + - -z-1/2,-y-1/2,x-1/2 + - y,-z,x + - z-1/2,y-1/2,x-1/2 + - y,z,-x + - -z-1/2,y-1/2,-x-1/2 + - z-1/2,-y-1/2,-x-1/2 + universal_h_m: P m -3 n +- crystal_class: cubic + hall: " P 4n 2 3 -1n" + hermann_mauguin: P n -3 m + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + - -z+1/2,-x+1/2,-y+1/2 + - x,-z,-y + - z+1/2,x+1/2,-y+1/2 + - -x,z,-y + - -z+1/2,x+1/2,y+1/2 + - -x,-z,y + - z+1/2,-x+1/2,y+1/2 + - x,z,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z,-y,x + - y+1/2,-z+1/2,x+1/2 + - z,y,x + - y+1/2,z+1/2,-x+1/2 + - -z,y,-x + - z,-y,-x + number: 224 + schoenflies: Oh^4 + symops: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + - -z+1/2,-x+1/2,-y+1/2 + - x,-z,-y + - z+1/2,x+1/2,-y+1/2 + - -x,z,-y + - -z+1/2,x+1/2,y+1/2 + - -x,-z,y + - z+1/2,-x+1/2,y+1/2 + - x,z,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z,-y,x + - y+1/2,-z+1/2,x+1/2 + - z,y,x + - y+1/2,z+1/2,-x+1/2 + - -z,y,-x + - z,-y,-x + universal_h_m: P n -3 m :1 +- crystal_class: cubic + hall: -P 4bc 2bc 3 + hermann_mauguin: P n -3 m + ncsym: + - x,y,z + - -y,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x,z+1/2 + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z + - -x+1/2,y,-z+1/2 + - -y,-x,-z + - z,x,y + - -x,z+1/2,y+1/2 + - -z+1/2,-x+1/2,y + - x+1/2,-z,y+1/2 + - z,-x+1/2,-y+1/2 + - x+1/2,z+1/2,-y + - -z+1/2,x,-y+1/2 + - -x,-z,-y + - y,z,x + - y,-z+1/2,-x+1/2 + - z+1/2,y+1/2,-x + - -y+1/2,z,-x+1/2 + - -z,-y,-x + - -y+1/2,-z+1/2,x + - z+1/2,-y,x+1/2 + - -z,y+1/2,x+1/2 + - -x,-y,-z + - y,-x-1/2,-z-1/2 + - x-1/2,y-1/2,-z + - -y-1/2,x,-z-1/2 + - -x,y-1/2,z-1/2 + - -y-1/2,-x-1/2,z + - x-1/2,-y,z-1/2 + - y,x,z + - -z,-x,-y + - x,-z-1/2,-y-1/2 + - z-1/2,x-1/2,-y + - -x-1/2,z,-y-1/2 + - -z,x-1/2,y-1/2 + - -x-1/2,-z-1/2,y + - z-1/2,-x,y-1/2 + - x,z,y + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z-1/2,-y-1/2,x + - y-1/2,-z,x-1/2 + - z,y,x + - y-1/2,z-1/2,-x + - -z-1/2,y,-x-1/2 + - z,-y-1/2,-x-1/2 + number: 224 + schoenflies: Oh^4 + symops: + - x,y,z + - -y,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x,z+1/2 + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z + - -x+1/2,y,-z+1/2 + - -y,-x,-z + - z,x,y + - -x,z+1/2,y+1/2 + - -z+1/2,-x+1/2,y + - x+1/2,-z,y+1/2 + - z,-x+1/2,-y+1/2 + - x+1/2,z+1/2,-y + - -z+1/2,x,-y+1/2 + - -x,-z,-y + - y,z,x + - y,-z+1/2,-x+1/2 + - z+1/2,y+1/2,-x + - -y+1/2,z,-x+1/2 + - -z,-y,-x + - -y+1/2,-z+1/2,x + - z+1/2,-y,x+1/2 + - -z,y+1/2,x+1/2 + - -x,-y,-z + - y,-x-1/2,-z-1/2 + - x-1/2,y-1/2,-z + - -y-1/2,x,-z-1/2 + - -x,y-1/2,z-1/2 + - -y-1/2,-x-1/2,z + - x-1/2,-y,z-1/2 + - y,x,z + - -z,-x,-y + - x,-z-1/2,-y-1/2 + - z-1/2,x-1/2,-y + - -x-1/2,z,-y-1/2 + - -z,x-1/2,y-1/2 + - -x-1/2,-z-1/2,y + - z-1/2,-x,y-1/2 + - x,z,y + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z-1/2,-y-1/2,x + - y-1/2,-z,x-1/2 + - z,y,x + - y-1/2,z-1/2,-x + - -z-1/2,y,-x-1/2 + - z,-y-1/2,-x-1/2 + universal_h_m: P n -3 m :2 +- crystal_class: cubic + hall: -F 4 2 3 + hermann_mauguin: F m -3 m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + number: 225 + schoenflies: Oh^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -x,z+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - x,-z+1/2,y+1/2 + - z,-x+1/2,-y+1/2 + - x,z+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - -x,-z+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - z,y+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -z,-y+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - z,-y+1/2,x+1/2 + - -z,y+1/2,x+1/2 + - -x,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - y,x+1/2,z+1/2 + - -z,-x+1/2,-y+1/2 + - x,-z+1/2,-y+1/2 + - z,x+1/2,-y+1/2 + - -x,z+1/2,-y+1/2 + - -z,x+1/2,y+1/2 + - -x,-z+1/2,y+1/2 + - z,-x+1/2,y+1/2 + - x,z+1/2,y+1/2 + - -y,-z+1/2,-x+1/2 + - -y,z+1/2,x+1/2 + - -z,-y+1/2,x+1/2 + - y,-z+1/2,x+1/2 + - z,y+1/2,x+1/2 + - y,z+1/2,-x+1/2 + - -z,y+1/2,-x+1/2 + - z,-y+1/2,-x+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x,-z+1/2 + - z+1/2,x,y+1/2 + - -x+1/2,z,y+1/2 + - -z+1/2,-x,y+1/2 + - x+1/2,-z,y+1/2 + - z+1/2,-x,-y+1/2 + - x+1/2,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - z+1/2,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y,-x+1/2 + - -y+1/2,-z,x+1/2 + - z+1/2,-y,x+1/2 + - -z+1/2,y,x+1/2 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - -x+1/2,y,z+1/2 + - -y+1/2,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x,z+1/2 + - -z+1/2,-x,-y+1/2 + - x+1/2,-z,-y+1/2 + - z+1/2,x,-y+1/2 + - -x+1/2,z,-y+1/2 + - -z+1/2,x,y+1/2 + - -x+1/2,-z,y+1/2 + - z+1/2,-x,y+1/2 + - x+1/2,z,y+1/2 + - -y+1/2,-z,-x+1/2 + - -y+1/2,z,x+1/2 + - -z+1/2,-y,x+1/2 + - y+1/2,-z,x+1/2 + - z+1/2,y,x+1/2 + - y+1/2,z,-x+1/2 + - -z+1/2,y,-x+1/2 + - z+1/2,-y,-x+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -y+1/2,-x+1/2,-z + - z+1/2,x+1/2,y + - -x+1/2,z+1/2,y + - -z+1/2,-x+1/2,y + - x+1/2,-z+1/2,y + - z+1/2,-x+1/2,-y + - x+1/2,z+1/2,-y + - -z+1/2,x+1/2,-y + - -x+1/2,-z+1/2,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - z+1/2,y+1/2,-x + - -y+1/2,z+1/2,-x + - -z+1/2,-y+1/2,-x + - -y+1/2,-z+1/2,x + - z+1/2,-y+1/2,x + - -z+1/2,y+1/2,x + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + - -z+1/2,-x+1/2,-y + - x+1/2,-z+1/2,-y + - z+1/2,x+1/2,-y + - -x+1/2,z+1/2,-y + - -z+1/2,x+1/2,y + - -x+1/2,-z+1/2,y + - z+1/2,-x+1/2,y + - x+1/2,z+1/2,y + - -y+1/2,-z+1/2,-x + - -y+1/2,z+1/2,x + - -z+1/2,-y+1/2,x + - y+1/2,-z+1/2,x + - z+1/2,y+1/2,x + - y+1/2,z+1/2,-x + - -z+1/2,y+1/2,-x + - z+1/2,-y+1/2,-x + universal_h_m: F m -3 m +- crystal_class: cubic + hall: -F 4a 2 3 + hermann_mauguin: F m -3 c + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y,-z + - y+1/2,x,-z + - -x+1/2,y+1/2,-z + - -y,-x+1/2,-z + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x,-y + - x+1/2,z,-y + - -z+1/2,x+1/2,-y + - -x,-z+1/2,-y + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y,-x + - -y,-z,x + - z,-y,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y,z + - -y-1/2,-x,z + - x-1/2,-y-1/2,z + - y,x-1/2,z + - -z,-x,-y + - x-1/2,-z,-y + - z-1/2,x-1/2,-y + - -x,z-1/2,-y + - -z,x,y + - -x-1/2,-z,y + - z-1/2,-x-1/2,y + - x,z-1/2,y + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z,-y,x-1/2 + - y-1/2,-z,x-1/2 + - z-1/2,y,x + - y,z,-x + - -z,y,-x-1/2 + - z-1/2,-y-1/2,-x-1/2 + number: 226 + schoenflies: Oh^6 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y,-z + - y+1/2,x,-z + - -x+1/2,y+1/2,-z + - -y,-x+1/2,-z + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x,-y + - x+1/2,z,-y + - -z+1/2,x+1/2,-y + - -x,-z+1/2,-y + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y,-x + - -y,-z,x + - z,-y,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x,-y,-z + - y-1/2,-x,-z + - x-1/2,y-1/2,-z + - -y,x-1/2,-z + - -x,y,z + - -y-1/2,-x,z + - x-1/2,-y-1/2,z + - y,x-1/2,z + - -z,-x,-y + - x-1/2,-z,-y + - z-1/2,x-1/2,-y + - -x,z-1/2,-y + - -z,x,y + - -x-1/2,-z,y + - z-1/2,-x-1/2,y + - x,z-1/2,y + - -y,-z,-x + - -y,z-1/2,x-1/2 + - -z,-y,x-1/2 + - y-1/2,-z,x-1/2 + - z-1/2,y,x + - y,z,-x + - -z,y,-x-1/2 + - z-1/2,-y-1/2,-x-1/2 + - x,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1,z+1/2 + - y,-x+1,z+1/2 + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1,-z+1/2 + - -y,-x+1,-z+1/2 + - z,x+1/2,y+1/2 + - -x+1/2,z+1/2,y+1/2 + - -z+1/2,-x+1,y+1/2 + - x,-z+1,y+1/2 + - z,-x+1/2,-y+1/2 + - x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1,-y+1/2 + - -x,-z+1,-y+1/2 + - y,z+1/2,x+1/2 + - y,-z+1,-x+1 + - z,y+1/2,-x+1 + - -y+1/2,z+1/2,-x+1 + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z+1/2,x+1/2 + - z,-y+1/2,x+1 + - -z+1/2,y+1,x+1 + - -x,-y+1/2,-z+1/2 + - y-1/2,-x+1/2,-z+1/2 + - x-1/2,y,-z+1/2 + - -y,x,-z+1/2 + - -x,y+1/2,z+1/2 + - -y-1/2,-x+1/2,z+1/2 + - x-1/2,-y,z+1/2 + - y,x,z+1/2 + - -z,-x+1/2,-y+1/2 + - x-1/2,-z+1/2,-y+1/2 + - z-1/2,x,-y+1/2 + - -x,z,-y+1/2 + - -z,x+1/2,y+1/2 + - -x-1/2,-z+1/2,y+1/2 + - z-1/2,-x,y+1/2 + - x,z,y+1/2 + - -y,-z+1/2,-x+1/2 + - -y,z,x + - -z,-y+1/2,x + - y-1/2,-z+1/2,x + - z-1/2,y+1/2,x+1/2 + - y,z+1/2,-x+1/2 + - -z,y+1/2,-x + - z-1/2,-y,-x + - x+1/2,y,z+1/2 + - -y+1,x,z+1/2 + - -x+1,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1,x,-z+1/2 + - -x+1,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z+1/2,x,y+1/2 + - -x+1,z,y+1/2 + - -z+1,-x+1/2,y+1/2 + - x+1/2,-z+1/2,y+1/2 + - z+1/2,-x,-y+1/2 + - x+1,z,-y+1/2 + - -z+1,x+1/2,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y+1/2,z,x+1/2 + - y+1/2,-z+1/2,-x+1 + - z+1/2,y,-x+1 + - -y+1,z,-x+1 + - -z+1,-y,-x+1/2 + - -y+1/2,-z,x+1/2 + - z+1/2,-y,x+1 + - -z+1,y+1/2,x+1 + - -x+1/2,-y,-z+1/2 + - y,-x,-z+1/2 + - x,y-1/2,-z+1/2 + - -y+1/2,x-1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -y,-x,z+1/2 + - x,-y-1/2,z+1/2 + - y+1/2,x-1/2,z+1/2 + - -z+1/2,-x,-y+1/2 + - x,-z,-y+1/2 + - z,x-1/2,-y+1/2 + - -x+1/2,z-1/2,-y+1/2 + - -z+1/2,x,y+1/2 + - -x,-z,y+1/2 + - z,-x-1/2,y+1/2 + - x+1/2,z-1/2,y+1/2 + - -y+1/2,-z,-x+1/2 + - -y+1/2,z-1/2,x + - -z+1/2,-y,x + - y,-z,x + - z,y,x+1/2 + - y+1/2,z,-x+1/2 + - -z+1/2,y,-x + - z,-y-1/2,-x + - x+1/2,y+1/2,z + - -y+1,x+1/2,z + - -x+1,-y+1,z + - y+1/2,-x+1,z + - x+1/2,-y+1/2,-z + - y+1,x+1/2,-z + - -x+1,y+1,-z + - -y+1/2,-x+1,-z + - z+1/2,x+1/2,y + - -x+1,z+1/2,y + - -z+1,-x+1,y + - x+1/2,-z+1,y + - z+1/2,-x+1/2,-y + - x+1,z+1/2,-y + - -z+1,x+1,-y + - -x+1/2,-z+1,-y + - y+1/2,z+1/2,x + - y+1/2,-z+1,-x+1/2 + - z+1/2,y+1/2,-x+1/2 + - -y+1,z+1/2,-x+1/2 + - -z+1,-y+1/2,-x + - -y+1/2,-z+1/2,x + - z+1/2,-y+1/2,x+1/2 + - -z+1,y+1,x+1/2 + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z + - x,y,-z + - -y+1/2,x,-z + - -x+1/2,y+1/2,z + - -y,-x+1/2,z + - x,-y,z + - y+1/2,x,z + - -z+1/2,-x+1/2,-y + - x,-z+1/2,-y + - z,x,-y + - -x+1/2,z,-y + - -z+1/2,x+1/2,y + - -x,-z+1/2,y + - z,-x,y + - x+1/2,z,y + - -y+1/2,-z+1/2,-x + - -y+1/2,z,x-1/2 + - -z+1/2,-y+1/2,x-1/2 + - y,-z+1/2,x-1/2 + - z,y+1/2,x + - y+1/2,z+1/2,-x + - -z+1/2,y+1/2,-x-1/2 + - z,-y,-x-1/2 + universal_h_m: F m -3 c +- crystal_class: cubic + hall: " F 4d 2 3 -1d" + hermann_mauguin: F d -3 m + ncsym: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + - -x+1/4,-y+1/4,-z+1/4 + - y,-x,-z + - x+1/4,y-1/4,-z-1/4 + - -y-1/2,x,-z-1/2 + - -x+1/4,y+1/4,z+1/4 + - -y,-x,z + - x+1/4,-y-1/4,z-1/4 + - y-1/2,x,z-1/2 + - -z+1/4,-x+1/4,-y+1/4 + - x,-z,-y + - z+1/4,x-1/4,-y-1/4 + - -x-1/2,z,-y-1/2 + - -z+1/4,x+1/4,y+1/4 + - -x,-z,y + - z+1/4,-x-1/4,y-1/4 + - x-1/2,z,y-1/2 + - -y+1/4,-z+1/4,-x+1/4 + - -y-1/4,z+1/4,x-1/4 + - -z,-y-1/2,x-1/2 + - y-1/4,-z-1/4,x+1/4 + - z,y,x + - y+1/4,z+1/4,-x+1/4 + - -z,y-1/2,-x-1/2 + - z-1/2,-y-1/2,-x + number: 227 + schoenflies: Oh^7 + symops: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + - -x+1/4,-y+1/4,-z+1/4 + - y,-x,-z + - x+1/4,y-1/4,-z-1/4 + - -y-1/2,x,-z-1/2 + - -x+1/4,y+1/4,z+1/4 + - -y,-x,z + - x+1/4,-y-1/4,z-1/4 + - y-1/2,x,z-1/2 + - -z+1/4,-x+1/4,-y+1/4 + - x,-z,-y + - z+1/4,x-1/4,-y-1/4 + - -x-1/2,z,-y-1/2 + - -z+1/4,x+1/4,y+1/4 + - -x,-z,y + - z+1/4,-x-1/4,y-1/4 + - x-1/2,z,y-1/2 + - -y+1/4,-z+1/4,-x+1/4 + - -y-1/4,z+1/4,x-1/4 + - -z,-y-1/2,x-1/2 + - y-1/4,-z-1/4,x+1/4 + - z,y,x + - y+1/4,z+1/4,-x+1/4 + - -z,y-1/2,-x-1/2 + - z-1/2,-y-1/2,-x + - x,y+1/2,z+1/2 + - -y+1/4,x+3/4,z+3/4 + - -x,-y+1,z+1 + - y+3/4,-x+3/4,z+5/4 + - x,-y+1/2,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x,y+1,-z+1 + - -y+3/4,-x+3/4,-z+5/4 + - z,x+1/2,y+1/2 + - -x+1/4,z+3/4,y+3/4 + - -z,-x+1,y+1 + - x+3/4,-z+3/4,y+5/4 + - z,-x+1/2,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z,x+1,-y+1 + - -x+3/4,-z+3/4,-y+5/4 + - y,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - z+1/4,y+5/4,-x+5/4 + - -y+1/2,z+1,-x+1/2 + - -z+1/4,-y+3/4,-x+3/4 + - -y,-z+1/2,x+1/2 + - z+1/4,-y+5/4,x+5/4 + - -z+3/4,y+5/4,x+3/4 + - -x+1/4,-y+3/4,-z+3/4 + - y,-x+1/2,-z+1/2 + - x+1/4,y+1/4,-z+1/4 + - -y-1/2,x+1/2,-z + - -x+1/4,y+3/4,z+3/4 + - -y,-x+1/2,z+1/2 + - x+1/4,-y+1/4,z+1/4 + - y-1/2,x+1/2,z + - -z+1/4,-x+3/4,-y+3/4 + - x,-z+1/2,-y+1/2 + - z+1/4,x+1/4,-y+1/4 + - -x-1/2,z+1/2,-y + - -z+1/4,x+3/4,y+3/4 + - -x,-z+1/2,y+1/2 + - z+1/4,-x+1/4,y+1/4 + - x-1/2,z+1/2,y + - -y+1/4,-z+3/4,-x+3/4 + - -y-1/4,z+3/4,x+1/4 + - -z,-y,x + - y-1/4,-z+1/4,x+3/4 + - z,y+1/2,x+1/2 + - y+1/4,z+3/4,-x+3/4 + - -z,y,-x + - z-1/2,-y,-x+1/2 + - x+1/2,y,z+1/2 + - -y+3/4,x+1/4,z+3/4 + - -x+1/2,-y+1/2,z+1 + - y+5/4,-x+1/4,z+5/4 + - x+1/2,-y,-z+1/2 + - y+3/4,x+1/4,-z+3/4 + - -x+1/2,y+1/2,-z+1 + - -y+5/4,-x+1/4,-z+5/4 + - z+1/2,x,y+1/2 + - -x+3/4,z+1/4,y+3/4 + - -z+1/2,-x+1/2,y+1 + - x+5/4,-z+1/4,y+5/4 + - z+1/2,-x,-y+1/2 + - x+3/4,z+1/4,-y+3/4 + - -z+1/2,x+1/2,-y+1 + - -x+5/4,-z+1/4,-y+5/4 + - y+1/2,z,x+1/2 + - y+1,-z,-x+1 + - z+3/4,y+3/4,-x+5/4 + - -y+1,z+1/2,-x+1/2 + - -z+3/4,-y+1/4,-x+3/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+5/4 + - -z+5/4,y+3/4,x+3/4 + - -x+3/4,-y+1/4,-z+3/4 + - y+1/2,-x,-z+1/2 + - x+3/4,y-1/4,-z+1/4 + - -y,x,-z + - -x+3/4,y+1/4,z+3/4 + - -y+1/2,-x,z+1/2 + - x+3/4,-y-1/4,z+1/4 + - y,x,z + - -z+3/4,-x+1/4,-y+3/4 + - x+1/2,-z,-y+1/2 + - z+3/4,x-1/4,-y+1/4 + - -x,z,-y + - -z+3/4,x+1/4,y+3/4 + - -x+1/2,-z,y+1/2 + - z+3/4,-x-1/4,y+1/4 + - x,z,y + - -y+3/4,-z+1/4,-x+3/4 + - -y+1/4,z+1/4,x+1/4 + - -z+1/2,-y-1/2,x + - y+1/4,-z-1/4,x+3/4 + - z+1/2,y,x+1/2 + - y+3/4,z+1/4,-x+3/4 + - -z+1/2,y-1/2,-x + - z,-y-1/2,-x+1/2 + - x+1/2,y+1/2,z + - -y+3/4,x+3/4,z+1/4 + - -x+1/2,-y+1,z+1/2 + - y+5/4,-x+3/4,z+3/4 + - x+1/2,-y+1/2,-z + - y+3/4,x+3/4,-z+1/4 + - -x+1/2,y+1,-z+1/2 + - -y+5/4,-x+3/4,-z+3/4 + - z+1/2,x+1/2,y + - -x+3/4,z+3/4,y+1/4 + - -z+1/2,-x+1,y+1/2 + - x+5/4,-z+3/4,y+3/4 + - z+1/2,-x+1/2,-y + - x+3/4,z+3/4,-y+1/4 + - -z+1/2,x+1,-y+1/2 + - -x+5/4,-z+3/4,-y+3/4 + - y+1/2,z+1/2,x + - y+1,-z+1/2,-x+1/2 + - z+3/4,y+5/4,-x+3/4 + - -y+1,z+1,-x + - -z+3/4,-y+3/4,-x+1/4 + - -y+1/2,-z+1/2,x + - z+3/4,-y+5/4,x+3/4 + - -z+5/4,y+5/4,x+1/4 + - -x+3/4,-y+3/4,-z+1/4 + - y+1/2,-x+1/2,-z + - x+3/4,y+1/4,-z-1/4 + - -y,x+1/2,-z-1/2 + - -x+3/4,y+3/4,z+1/4 + - -y+1/2,-x+1/2,z + - x+3/4,-y+1/4,z-1/4 + - y,x+1/2,z-1/2 + - -z+3/4,-x+3/4,-y+1/4 + - x+1/2,-z+1/2,-y + - z+3/4,x+1/4,-y-1/4 + - -x,z+1/2,-y-1/2 + - -z+3/4,x+3/4,y+1/4 + - -x+1/2,-z+1/2,y + - z+3/4,-x+1/4,y-1/4 + - x,z+1/2,y-1/2 + - -y+3/4,-z+3/4,-x+1/4 + - -y+1/4,z+3/4,x-1/4 + - -z+1/2,-y,x-1/2 + - y+1/4,-z+1/4,x+1/4 + - z+1/2,y+1/2,x + - y+3/4,z+3/4,-x+1/4 + - -z+1/2,y,-x-1/2 + - z,-y,-x + universal_h_m: F d -3 m :1 +- crystal_class: cubic + hall: -F 4vw 2vw 3 + hermann_mauguin: F d -3 m + ncsym: + - x,y,z + - -y,x+1/4,z+1/4 + - -x+3/4,-y+1/4,z+1/2 + - y+3/4,-x,z+3/4 + - x,-y+1/4,-z+1/4 + - y+3/4,x+1/4,-z+1/2 + - -x+3/4,y,-z+3/4 + - -y,-x,-z + - z,x,y + - -x,z+1/4,y+1/4 + - -z+3/4,-x+1/4,y+1/2 + - x+3/4,-z,y+3/4 + - z,-x+1/4,-y+1/4 + - x+3/4,z+1/4,-y+1/2 + - -z+3/4,x,-y+3/4 + - -x,-z,-y + - y,z,x + - y+1/2,-z+3/4,-x+1/4 + - z+1/4,y+3/4,-x+1/2 + - -y+1/4,z+1/2,-x+3/4 + - -z,-y+1/2,-x+1/2 + - -y+1/4,-z+1/4,x + - z+1/4,-y,x+1/4 + - -z+1/2,y+1/4,x+3/4 + - -x,-y,-z + - y,-x-1/4,-z-1/4 + - x-3/4,y-1/4,-z-1/2 + - -y-3/4,x,-z-3/4 + - -x,y-1/4,z-1/4 + - -y-3/4,-x-1/4,z-1/2 + - x-3/4,-y,z-3/4 + - y,x,z + - -z,-x,-y + - x,-z-1/4,-y-1/4 + - z-3/4,x-1/4,-y-1/2 + - -x-3/4,z,-y-3/4 + - -z,x-1/4,y-1/4 + - -x-3/4,-z-1/4,y-1/2 + - z-3/4,-x,y-3/4 + - x,z,y + - -y,-z,-x + - -y-1/2,z-3/4,x-1/4 + - -z-1/4,-y-3/4,x-1/2 + - y-1/4,-z-1/2,x-3/4 + - z,y-1/2,x-1/2 + - y-1/4,z-1/4,-x + - -z-1/4,y,-x-1/4 + - z-1/2,-y-1/4,-x-3/4 + number: 227 + schoenflies: Oh^7 + symops: + - x,y,z + - -y,x+1/4,z+1/4 + - -x+3/4,-y+1/4,z+1/2 + - y+3/4,-x,z+3/4 + - x,-y+1/4,-z+1/4 + - y+3/4,x+1/4,-z+1/2 + - -x+3/4,y,-z+3/4 + - -y,-x,-z + - z,x,y + - -x,z+1/4,y+1/4 + - -z+3/4,-x+1/4,y+1/2 + - x+3/4,-z,y+3/4 + - z,-x+1/4,-y+1/4 + - x+3/4,z+1/4,-y+1/2 + - -z+3/4,x,-y+3/4 + - -x,-z,-y + - y,z,x + - y+1/2,-z+3/4,-x+1/4 + - z+1/4,y+3/4,-x+1/2 + - -y+1/4,z+1/2,-x+3/4 + - -z,-y+1/2,-x+1/2 + - -y+1/4,-z+1/4,x + - z+1/4,-y,x+1/4 + - -z+1/2,y+1/4,x+3/4 + - -x,-y,-z + - y,-x-1/4,-z-1/4 + - x-3/4,y-1/4,-z-1/2 + - -y-3/4,x,-z-3/4 + - -x,y-1/4,z-1/4 + - -y-3/4,-x-1/4,z-1/2 + - x-3/4,-y,z-3/4 + - y,x,z + - -z,-x,-y + - x,-z-1/4,-y-1/4 + - z-3/4,x-1/4,-y-1/2 + - -x-3/4,z,-y-3/4 + - -z,x-1/4,y-1/4 + - -x-3/4,-z-1/4,y-1/2 + - z-3/4,-x,y-3/4 + - x,z,y + - -y,-z,-x + - -y-1/2,z-3/4,x-1/4 + - -z-1/4,-y-3/4,x-1/2 + - y-1/4,-z-1/2,x-3/4 + - z,y-1/2,x-1/2 + - y-1/4,z-1/4,-x + - -z-1/4,y,-x-1/4 + - z-1/2,-y-1/4,-x-3/4 + - x,y+1/2,z+1/2 + - -y,x+3/4,z+3/4 + - -x+3/4,-y+3/4,z+1 + - y+3/4,-x+1/2,z+5/4 + - x,-y+3/4,-z+3/4 + - y+3/4,x+3/4,-z+1 + - -x+3/4,y+1/2,-z+5/4 + - -y,-x+1/2,-z+1/2 + - z,x+1/2,y+1/2 + - -x,z+3/4,y+3/4 + - -z+3/4,-x+3/4,y+1 + - x+3/4,-z+1/2,y+5/4 + - z,-x+3/4,-y+3/4 + - x+3/4,z+3/4,-y+1 + - -z+3/4,x+1/2,-y+5/4 + - -x,-z+1/2,-y+1/2 + - y,z+1/2,x+1/2 + - y+1/2,-z+5/4,-x+3/4 + - z+1/4,y+5/4,-x+1 + - -y+1/4,z+1,-x+5/4 + - -z,-y+1,-x+1 + - -y+1/4,-z+3/4,x+1/2 + - z+1/4,-y+1/2,x+3/4 + - -z+1/2,y+3/4,x+5/4 + - -x,-y+1/2,-z+1/2 + - y,-x+1/4,-z+1/4 + - x-3/4,y+1/4,-z + - -y-3/4,x+1/2,-z-1/4 + - -x,y+1/4,z+1/4 + - -y-3/4,-x+1/4,z + - x-3/4,-y+1/2,z-1/4 + - y,x+1/2,z+1/2 + - -z,-x+1/2,-y+1/2 + - x,-z+1/4,-y+1/4 + - z-3/4,x+1/4,-y + - -x-3/4,z+1/2,-y-1/4 + - -z,x+1/4,y+1/4 + - -x-3/4,-z+1/4,y + - z-3/4,-x+1/2,y-1/4 + - x,z+1/2,y+1/2 + - -y,-z+1/2,-x+1/2 + - -y-1/2,z-1/4,x+1/4 + - -z-1/4,-y-1/4,x + - y-1/4,-z,x-1/4 + - z,y,x + - y-1/4,z+1/4,-x+1/2 + - -z-1/4,y+1/2,-x+1/4 + - z-1/2,-y+1/4,-x-1/4 + - x+1/2,y,z+1/2 + - -y+1/2,x+1/4,z+3/4 + - -x+5/4,-y+1/4,z+1 + - y+5/4,-x,z+5/4 + - x+1/2,-y+1/4,-z+3/4 + - y+5/4,x+1/4,-z+1 + - -x+5/4,y,-z+5/4 + - -y+1/2,-x,-z+1/2 + - z+1/2,x,y+1/2 + - -x+1/2,z+1/4,y+3/4 + - -z+5/4,-x+1/4,y+1 + - x+5/4,-z,y+5/4 + - z+1/2,-x+1/4,-y+3/4 + - x+5/4,z+1/4,-y+1 + - -z+5/4,x,-y+5/4 + - -x+1/2,-z,-y+1/2 + - y+1/2,z,x+1/2 + - y+1,-z+3/4,-x+3/4 + - z+3/4,y+3/4,-x+1 + - -y+3/4,z+1/2,-x+5/4 + - -z+1/2,-y+1/2,-x+1 + - -y+3/4,-z+1/4,x+1/2 + - z+3/4,-y,x+3/4 + - -z+1,y+1/4,x+5/4 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x-1/4,-z+1/4 + - x-1/4,y-1/4,-z + - -y-1/4,x,-z-1/4 + - -x+1/2,y-1/4,z+1/4 + - -y-1/4,-x-1/4,z + - x-1/4,-y,z-1/4 + - y+1/2,x,z+1/2 + - -z+1/2,-x,-y+1/2 + - x+1/2,-z-1/4,-y+1/4 + - z-1/4,x-1/4,-y + - -x-1/4,z,-y-1/4 + - -z+1/2,x-1/4,y+1/4 + - -x-1/4,-z-1/4,y + - z-1/4,-x,y-1/4 + - x+1/2,z,y+1/2 + - -y+1/2,-z,-x+1/2 + - -y,z-3/4,x+1/4 + - -z+1/4,-y-3/4,x + - y+1/4,-z-1/2,x-1/4 + - z+1/2,y-1/2,x + - y+1/4,z-1/4,-x+1/2 + - -z+1/4,y,-x+1/4 + - z,-y-1/4,-x-1/4 + - x+1/2,y+1/2,z + - -y+1/2,x+3/4,z+1/4 + - -x+5/4,-y+3/4,z+1/2 + - y+5/4,-x+1/2,z+3/4 + - x+1/2,-y+3/4,-z+1/4 + - y+5/4,x+3/4,-z+1/2 + - -x+5/4,y+1/2,-z+3/4 + - -y+1/2,-x+1/2,-z + - z+1/2,x+1/2,y + - -x+1/2,z+3/4,y+1/4 + - -z+5/4,-x+3/4,y+1/2 + - x+5/4,-z+1/2,y+3/4 + - z+1/2,-x+3/4,-y+1/4 + - x+5/4,z+3/4,-y+1/2 + - -z+5/4,x+1/2,-y+3/4 + - -x+1/2,-z+1/2,-y + - y+1/2,z+1/2,x + - y+1,-z+5/4,-x+1/4 + - z+3/4,y+5/4,-x+1/2 + - -y+3/4,z+1,-x+3/4 + - -z+1/2,-y+1,-x+1/2 + - -y+3/4,-z+3/4,x + - z+3/4,-y+1/2,x+1/4 + - -z+1,y+3/4,x+3/4 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/4,-z-1/4 + - x-1/4,y+1/4,-z-1/2 + - -y-1/4,x+1/2,-z-3/4 + - -x+1/2,y+1/4,z-1/4 + - -y-1/4,-x+1/4,z-1/2 + - x-1/4,-y+1/2,z-3/4 + - y+1/2,x+1/2,z + - -z+1/2,-x+1/2,-y + - x+1/2,-z+1/4,-y-1/4 + - z-1/4,x+1/4,-y-1/2 + - -x-1/4,z+1/2,-y-3/4 + - -z+1/2,x+1/4,y-1/4 + - -x-1/4,-z+1/4,y-1/2 + - z-1/4,-x+1/2,y-3/4 + - x+1/2,z+1/2,y + - -y+1/2,-z+1/2,-x + - -y,z-1/4,x-1/4 + - -z+1/4,-y-1/4,x-1/2 + - y+1/4,-z,x-3/4 + - z+1/2,y,x-1/2 + - y+1/4,z+1/4,-x + - -z+1/4,y+1/2,-x-1/4 + - z,-y+1/4,-x-3/4 + universal_h_m: F d -3 m :2 +- crystal_class: cubic + hall: " F 4d 2 3 -1ad" + hermann_mauguin: F d -3 c + ncsym: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + - -x+3/4,-y+1/4,-z+1/4 + - y+1/2,-x,-z + - x+3/4,y-1/4,-z-1/4 + - -y,x,-z-1/2 + - -x+3/4,y+1/4,z+1/4 + - -y+1/2,-x,z + - x+3/4,-y-1/4,z-1/4 + - y,x,z-1/2 + - -z+3/4,-x+1/4,-y+1/4 + - x+1/2,-z,-y + - z+3/4,x-1/4,-y-1/4 + - -x,z,-y-1/2 + - -z+3/4,x+1/4,y+1/4 + - -x+1/2,-z,y + - z+3/4,-x-1/4,y-1/4 + - x,z,y-1/2 + - -y+3/4,-z+1/4,-x+1/4 + - -y+1/4,z+1/4,x-1/4 + - -z+1/2,-y-1/2,x-1/2 + - y+1/4,-z-1/4,x+1/4 + - z+1/2,y,x + - y+3/4,z+1/4,-x+1/4 + - -z+1/2,y-1/2,-x-1/2 + - z,-y-1/2,-x + number: 228 + schoenflies: Oh^8 + symops: + - x,y,z + - -y+1/4,x+1/4,z+1/4 + - -x,-y+1/2,z+1/2 + - y+3/4,-x+1/4,z+3/4 + - x,-y,-z + - y+1/4,x+1/4,-z+1/4 + - -x,y+1/2,-z+1/2 + - -y+3/4,-x+1/4,-z+3/4 + - z,x,y + - -x+1/4,z+1/4,y+1/4 + - -z,-x+1/2,y+1/2 + - x+3/4,-z+1/4,y+3/4 + - z,-x,-y + - x+1/4,z+1/4,-y+1/4 + - -z,x+1/2,-y+1/2 + - -x+3/4,-z+1/4,-y+3/4 + - y,z,x + - y+1/2,-z,-x+1/2 + - z+1/4,y+3/4,-x+3/4 + - -y+1/2,z+1/2,-x + - -z+1/4,-y+1/4,-x+1/4 + - -y,-z,x + - z+1/4,-y+3/4,x+3/4 + - -z+3/4,y+3/4,x+1/4 + - -x+3/4,-y+1/4,-z+1/4 + - y+1/2,-x,-z + - x+3/4,y-1/4,-z-1/4 + - -y,x,-z-1/2 + - -x+3/4,y+1/4,z+1/4 + - -y+1/2,-x,z + - x+3/4,-y-1/4,z-1/4 + - y,x,z-1/2 + - -z+3/4,-x+1/4,-y+1/4 + - x+1/2,-z,-y + - z+3/4,x-1/4,-y-1/4 + - -x,z,-y-1/2 + - -z+3/4,x+1/4,y+1/4 + - -x+1/2,-z,y + - z+3/4,-x-1/4,y-1/4 + - x,z,y-1/2 + - -y+3/4,-z+1/4,-x+1/4 + - -y+1/4,z+1/4,x-1/4 + - -z+1/2,-y-1/2,x-1/2 + - y+1/4,-z-1/4,x+1/4 + - z+1/2,y,x + - y+3/4,z+1/4,-x+1/4 + - -z+1/2,y-1/2,-x-1/2 + - z,-y-1/2,-x + - x,y+1/2,z+1/2 + - -y+1/4,x+3/4,z+3/4 + - -x,-y+1,z+1 + - y+3/4,-x+3/4,z+5/4 + - x,-y+1/2,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x,y+1,-z+1 + - -y+3/4,-x+3/4,-z+5/4 + - z,x+1/2,y+1/2 + - -x+1/4,z+3/4,y+3/4 + - -z,-x+1,y+1 + - x+3/4,-z+3/4,y+5/4 + - z,-x+1/2,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z,x+1,-y+1 + - -x+3/4,-z+3/4,-y+5/4 + - y,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1 + - z+1/4,y+5/4,-x+5/4 + - -y+1/2,z+1,-x+1/2 + - -z+1/4,-y+3/4,-x+3/4 + - -y,-z+1/2,x+1/2 + - z+1/4,-y+5/4,x+5/4 + - -z+3/4,y+5/4,x+3/4 + - -x+3/4,-y+3/4,-z+3/4 + - y+1/2,-x+1/2,-z+1/2 + - x+3/4,y+1/4,-z+1/4 + - -y,x+1/2,-z + - -x+3/4,y+3/4,z+3/4 + - -y+1/2,-x+1/2,z+1/2 + - x+3/4,-y+1/4,z+1/4 + - y,x+1/2,z + - -z+3/4,-x+3/4,-y+3/4 + - x+1/2,-z+1/2,-y+1/2 + - z+3/4,x+1/4,-y+1/4 + - -x,z+1/2,-y + - -z+3/4,x+3/4,y+3/4 + - -x+1/2,-z+1/2,y+1/2 + - z+3/4,-x+1/4,y+1/4 + - x,z+1/2,y + - -y+3/4,-z+3/4,-x+3/4 + - -y+1/4,z+3/4,x+1/4 + - -z+1/2,-y,x + - y+1/4,-z+1/4,x+3/4 + - z+1/2,y+1/2,x+1/2 + - y+3/4,z+3/4,-x+3/4 + - -z+1/2,y,-x + - z,-y,-x+1/2 + - x+1/2,y,z+1/2 + - -y+3/4,x+1/4,z+3/4 + - -x+1/2,-y+1/2,z+1 + - y+5/4,-x+1/4,z+5/4 + - x+1/2,-y,-z+1/2 + - y+3/4,x+1/4,-z+3/4 + - -x+1/2,y+1/2,-z+1 + - -y+5/4,-x+1/4,-z+5/4 + - z+1/2,x,y+1/2 + - -x+3/4,z+1/4,y+3/4 + - -z+1/2,-x+1/2,y+1 + - x+5/4,-z+1/4,y+5/4 + - z+1/2,-x,-y+1/2 + - x+3/4,z+1/4,-y+3/4 + - -z+1/2,x+1/2,-y+1 + - -x+5/4,-z+1/4,-y+5/4 + - y+1/2,z,x+1/2 + - y+1,-z,-x+1 + - z+3/4,y+3/4,-x+5/4 + - -y+1,z+1/2,-x+1/2 + - -z+3/4,-y+1/4,-x+3/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+5/4 + - -z+5/4,y+3/4,x+3/4 + - -x+5/4,-y+1/4,-z+3/4 + - y+1,-x,-z+1/2 + - x+5/4,y-1/4,-z+1/4 + - -y+1/2,x,-z + - -x+5/4,y+1/4,z+3/4 + - -y+1,-x,z+1/2 + - x+5/4,-y-1/4,z+1/4 + - y+1/2,x,z + - -z+5/4,-x+1/4,-y+3/4 + - x+1,-z,-y+1/2 + - z+5/4,x-1/4,-y+1/4 + - -x+1/2,z,-y + - -z+5/4,x+1/4,y+3/4 + - -x+1,-z,y+1/2 + - z+5/4,-x-1/4,y+1/4 + - x+1/2,z,y + - -y+5/4,-z+1/4,-x+3/4 + - -y+3/4,z+1/4,x+1/4 + - -z+1,-y-1/2,x + - y+3/4,-z-1/4,x+3/4 + - z+1,y,x+1/2 + - y+5/4,z+1/4,-x+3/4 + - -z+1,y-1/2,-x + - z+1/2,-y-1/2,-x+1/2 + - x+1/2,y+1/2,z + - -y+3/4,x+3/4,z+1/4 + - -x+1/2,-y+1,z+1/2 + - y+5/4,-x+3/4,z+3/4 + - x+1/2,-y+1/2,-z + - y+3/4,x+3/4,-z+1/4 + - -x+1/2,y+1,-z+1/2 + - -y+5/4,-x+3/4,-z+3/4 + - z+1/2,x+1/2,y + - -x+3/4,z+3/4,y+1/4 + - -z+1/2,-x+1,y+1/2 + - x+5/4,-z+3/4,y+3/4 + - z+1/2,-x+1/2,-y + - x+3/4,z+3/4,-y+1/4 + - -z+1/2,x+1,-y+1/2 + - -x+5/4,-z+3/4,-y+3/4 + - y+1/2,z+1/2,x + - y+1,-z+1/2,-x+1/2 + - z+3/4,y+5/4,-x+3/4 + - -y+1,z+1,-x + - -z+3/4,-y+3/4,-x+1/4 + - -y+1/2,-z+1/2,x + - z+3/4,-y+5/4,x+3/4 + - -z+5/4,y+5/4,x+1/4 + - -x+5/4,-y+3/4,-z+1/4 + - y+1,-x+1/2,-z + - x+5/4,y+1/4,-z-1/4 + - -y+1/2,x+1/2,-z-1/2 + - -x+5/4,y+3/4,z+1/4 + - -y+1,-x+1/2,z + - x+5/4,-y+1/4,z-1/4 + - y+1/2,x+1/2,z-1/2 + - -z+5/4,-x+3/4,-y+1/4 + - x+1,-z+1/2,-y + - z+5/4,x+1/4,-y-1/4 + - -x+1/2,z+1/2,-y-1/2 + - -z+5/4,x+3/4,y+1/4 + - -x+1,-z+1/2,y + - z+5/4,-x+1/4,y-1/4 + - x+1/2,z+1/2,y-1/2 + - -y+5/4,-z+3/4,-x+1/4 + - -y+3/4,z+3/4,x-1/4 + - -z+1,-y,x-1/2 + - y+3/4,-z+1/4,x+1/4 + - z+1,y+1/2,x + - y+5/4,z+3/4,-x+1/4 + - -z+1,y,-x-1/2 + - z+1/2,-y,-x + universal_h_m: F d -3 c :1 +- crystal_class: cubic + hall: -F 4ud 2vw 3 + hermann_mauguin: F d -3 c + ncsym: + - x,y,z + - -y+1/2,x+1/4,z+1/4 + - -x+1/4,-y+3/4,z+1/2 + - y+3/4,-x+1/2,z+3/4 + - x,-y+1/4,-z+1/4 + - y+1/4,x+1/4,-z+1/2 + - -x+1/4,y+1/2,-z+3/4 + - -y,-x+1/2,-z + - z,x,y + - -x+1/2,z+1/4,y+1/4 + - -z+1/4,-x+3/4,y+1/2 + - x+3/4,-z+1/2,y+3/4 + - z,-x+1/4,-y+1/4 + - x+1/4,z+1/4,-y+1/2 + - -z+1/4,x+1/2,-y+3/4 + - -x,-z+1/2,-y + - y,z,x + - y+1/2,-z+1/4,-x+3/4 + - z+1/4,y+3/4,-x + - -y+3/4,z+1/2,-x+1/4 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/4,-z+1/4,x + - z+1/4,-y,x+3/4 + - -z,y+3/4,x+1/4 + - -x,-y,-z + - y-1/2,-x-1/4,-z-1/4 + - x-1/4,y-3/4,-z-1/2 + - -y-3/4,x-1/2,-z-3/4 + - -x,y-1/4,z-1/4 + - -y-1/4,-x-1/4,z-1/2 + - x-1/4,-y-1/2,z-3/4 + - y,x-1/2,z + - -z,-x,-y + - x-1/2,-z-1/4,-y-1/4 + - z-1/4,x-3/4,-y-1/2 + - -x-3/4,z-1/2,-y-3/4 + - -z,x-1/4,y-1/4 + - -x-1/4,-z-1/4,y-1/2 + - z-1/4,-x-1/2,y-3/4 + - x,z-1/2,y + - -y,-z,-x + - -y-1/2,z-1/4,x-3/4 + - -z-1/4,-y-3/4,x + - y-3/4,-z-1/2,x-1/4 + - z-1/2,y-1/2,x-1/2 + - y-1/4,z-1/4,-x + - -z-1/4,y,-x-3/4 + - z,-y-3/4,-x-1/4 + number: 228 + schoenflies: Oh^8 + symops: + - x,y,z + - -y+1/2,x+1/4,z+1/4 + - -x+1/4,-y+3/4,z+1/2 + - y+3/4,-x+1/2,z+3/4 + - x,-y+1/4,-z+1/4 + - y+1/4,x+1/4,-z+1/2 + - -x+1/4,y+1/2,-z+3/4 + - -y,-x+1/2,-z + - z,x,y + - -x+1/2,z+1/4,y+1/4 + - -z+1/4,-x+3/4,y+1/2 + - x+3/4,-z+1/2,y+3/4 + - z,-x+1/4,-y+1/4 + - x+1/4,z+1/4,-y+1/2 + - -z+1/4,x+1/2,-y+3/4 + - -x,-z+1/2,-y + - y,z,x + - y+1/2,-z+1/4,-x+3/4 + - z+1/4,y+3/4,-x + - -y+3/4,z+1/2,-x+1/4 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/4,-z+1/4,x + - z+1/4,-y,x+3/4 + - -z,y+3/4,x+1/4 + - -x,-y,-z + - y-1/2,-x-1/4,-z-1/4 + - x-1/4,y-3/4,-z-1/2 + - -y-3/4,x-1/2,-z-3/4 + - -x,y-1/4,z-1/4 + - -y-1/4,-x-1/4,z-1/2 + - x-1/4,-y-1/2,z-3/4 + - y,x-1/2,z + - -z,-x,-y + - x-1/2,-z-1/4,-y-1/4 + - z-1/4,x-3/4,-y-1/2 + - -x-3/4,z-1/2,-y-3/4 + - -z,x-1/4,y-1/4 + - -x-1/4,-z-1/4,y-1/2 + - z-1/4,-x-1/2,y-3/4 + - x,z-1/2,y + - -y,-z,-x + - -y-1/2,z-1/4,x-3/4 + - -z-1/4,-y-3/4,x + - y-3/4,-z-1/2,x-1/4 + - z-1/2,y-1/2,x-1/2 + - y-1/4,z-1/4,-x + - -z-1/4,y,-x-3/4 + - z,-y-3/4,-x-1/4 + - x,y+1/2,z+1/2 + - -y+1/2,x+3/4,z+3/4 + - -x+1/4,-y+5/4,z+1 + - y+3/4,-x+1,z+5/4 + - x,-y+3/4,-z+3/4 + - y+1/4,x+3/4,-z+1 + - -x+1/4,y+1,-z+5/4 + - -y,-x+1,-z+1/2 + - z,x+1/2,y+1/2 + - -x+1/2,z+3/4,y+3/4 + - -z+1/4,-x+5/4,y+1 + - x+3/4,-z+1,y+5/4 + - z,-x+3/4,-y+3/4 + - x+1/4,z+3/4,-y+1 + - -z+1/4,x+1,-y+5/4 + - -x,-z+1,-y+1/2 + - y,z+1/2,x+1/2 + - y+1/2,-z+3/4,-x+5/4 + - z+1/4,y+5/4,-x+1/2 + - -y+3/4,z+1,-x+3/4 + - -z+1/2,-y+1,-x+1 + - -y+1/4,-z+3/4,x+1/2 + - z+1/4,-y+1/2,x+5/4 + - -z,y+5/4,x+3/4 + - -x,-y+1/2,-z+1/2 + - y-1/2,-x+1/4,-z+1/4 + - x-1/4,y-1/4,-z + - -y-3/4,x,-z-1/4 + - -x,y+1/4,z+1/4 + - -y-1/4,-x+1/4,z + - x-1/4,-y,z-1/4 + - y,x,z+1/2 + - -z,-x+1/2,-y+1/2 + - x-1/2,-z+1/4,-y+1/4 + - z-1/4,x-1/4,-y + - -x-3/4,z,-y-1/4 + - -z,x+1/4,y+1/4 + - -x-1/4,-z+1/4,y + - z-1/4,-x,y-1/4 + - x,z,y+1/2 + - -y,-z+1/2,-x+1/2 + - -y-1/2,z+1/4,x-1/4 + - -z-1/4,-y-1/4,x+1/2 + - y-3/4,-z,x+1/4 + - z-1/2,y,x + - y-1/4,z+1/4,-x+1/2 + - -z-1/4,y+1/2,-x-1/4 + - z,-y-1/4,-x+1/4 + - x+1/2,y,z+1/2 + - -y+1,x+1/4,z+3/4 + - -x+3/4,-y+3/4,z+1 + - y+5/4,-x+1/2,z+5/4 + - x+1/2,-y+1/4,-z+3/4 + - y+3/4,x+1/4,-z+1 + - -x+3/4,y+1/2,-z+5/4 + - -y+1/2,-x+1/2,-z+1/2 + - z+1/2,x,y+1/2 + - -x+1,z+1/4,y+3/4 + - -z+3/4,-x+3/4,y+1 + - x+5/4,-z+1/2,y+5/4 + - z+1/2,-x+1/4,-y+3/4 + - x+3/4,z+1/4,-y+1 + - -z+3/4,x+1/2,-y+5/4 + - -x+1/2,-z+1/2,-y+1/2 + - y+1/2,z,x+1/2 + - y+1,-z+1/4,-x+5/4 + - z+3/4,y+3/4,-x+1/2 + - -y+5/4,z+1/2,-x+3/4 + - -z+1,-y+1/2,-x+1 + - -y+3/4,-z+1/4,x+1/2 + - z+3/4,-y,x+5/4 + - -z+1/2,y+3/4,x+3/4 + - -x+1/2,-y,-z+1/2 + - y,-x-1/4,-z+1/4 + - x+1/4,y-3/4,-z + - -y-1/4,x-1/2,-z-1/4 + - -x+1/2,y-1/4,z+1/4 + - -y+1/4,-x-1/4,z + - x+1/4,-y-1/2,z-1/4 + - y+1/2,x-1/2,z+1/2 + - -z+1/2,-x,-y+1/2 + - x,-z-1/4,-y+1/4 + - z+1/4,x-3/4,-y + - -x-1/4,z-1/2,-y-1/4 + - -z+1/2,x-1/4,y+1/4 + - -x+1/4,-z-1/4,y + - z+1/4,-x-1/2,y-1/4 + - x+1/2,z-1/2,y+1/2 + - -y+1/2,-z,-x+1/2 + - -y,z-1/4,x-1/4 + - -z+1/4,-y-3/4,x+1/2 + - y-1/4,-z-1/2,x+1/4 + - z,y-1/2,x + - y+1/4,z-1/4,-x+1/2 + - -z+1/4,y,-x-1/4 + - z+1/2,-y-3/4,-x+1/4 + - x+1/2,y+1/2,z + - -y+1,x+3/4,z+1/4 + - -x+3/4,-y+5/4,z+1/2 + - y+5/4,-x+1,z+3/4 + - x+1/2,-y+3/4,-z+1/4 + - y+3/4,x+3/4,-z+1/2 + - -x+3/4,y+1,-z+3/4 + - -y+1/2,-x+1,-z + - z+1/2,x+1/2,y + - -x+1,z+3/4,y+1/4 + - -z+3/4,-x+5/4,y+1/2 + - x+5/4,-z+1,y+3/4 + - z+1/2,-x+3/4,-y+1/4 + - x+3/4,z+3/4,-y+1/2 + - -z+3/4,x+1,-y+3/4 + - -x+1/2,-z+1,-y + - y+1/2,z+1/2,x + - y+1,-z+3/4,-x+3/4 + - z+3/4,y+5/4,-x + - -y+5/4,z+1,-x+1/4 + - -z+1,-y+1,-x+1/2 + - -y+3/4,-z+3/4,x + - z+3/4,-y+1/2,x+3/4 + - -z+1/2,y+5/4,x+1/4 + - -x+1/2,-y+1/2,-z + - y,-x+1/4,-z-1/4 + - x+1/4,y-1/4,-z-1/2 + - -y-1/4,x,-z-3/4 + - -x+1/2,y+1/4,z-1/4 + - -y+1/4,-x+1/4,z-1/2 + - x+1/4,-y,z-3/4 + - y+1/2,x,z + - -z+1/2,-x+1/2,-y + - x,-z+1/4,-y-1/4 + - z+1/4,x-1/4,-y-1/2 + - -x-1/4,z,-y-3/4 + - -z+1/2,x+1/4,y-1/4 + - -x+1/4,-z+1/4,y-1/2 + - z+1/4,-x,y-3/4 + - x+1/2,z,y + - -y+1/2,-z+1/2,-x + - -y,z+1/4,x-3/4 + - -z+1/4,-y-1/4,x + - y-1/4,-z,x-1/4 + - z,y,x-1/2 + - y+1/4,z+1/4,-x + - -z+1/4,y+1/2,-x-3/4 + - z+1/2,-y-1/4,-x-1/4 + universal_h_m: F d -3 c :2 +- crystal_class: cubic + hall: -I 4 2 3 + hermann_mauguin: I m -3 m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + number: 229 + schoenflies: Oh^9 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + - -z,-x,-y + - x,-z,-y + - z,x,-y + - -x,z,-y + - -z,x,y + - -x,-z,y + - z,-x,y + - x,z,y + - -y,-z,-x + - -y,z,x + - -z,-y,x + - y,-z,x + - z,y,x + - y,z,-x + - -z,y,-x + - z,-y,-x + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z+1/2,x+1/2,y+1/2 + - -x+1/2,z+1/2,y+1/2 + - -z+1/2,-x+1/2,y+1/2 + - x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,-y+1/2 + - x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,-x+1/2 + - z+1/2,y+1/2,-x+1/2 + - -y+1/2,z+1/2,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x+1/2 + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + universal_h_m: I m -3 m +- crystal_class: cubic + hall: -I 4bd 2c 3 + hermann_mauguin: I a -3 d + ncsym: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z,-x,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z+1/2,x,-y + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z-1/2 + - -y-1/4,-x-3/4,z-3/4 + - x-1/2,-y,z + - y-1/4,x-1/4,z-1/4 + - -z,-x,-y + - x-1/4,-z-3/4,-y-1/4 + - z-1/2,x,-y-1/2 + - -x-1/4,z-1/4,-y-3/4 + - -z,x,y-1/2 + - -x-1/4,-z-3/4,y-3/4 + - z-1/2,-x,y + - x-1/4,z-1/4,y-1/4 + - -y,-z,-x + - -y-1/2,z-1/2,x + - -z-3/4,-y-1/4,x-1/4 + - y,-z-1/2,x-1/2 + - z-1/4,y-1/4,x-1/4 + - y-1/2,z,-x-1/2 + - -z-3/4,y-3/4,-x-1/4 + - z-3/4,-y-1/4,-x-3/4 + number: 230 + schoenflies: Oh^10 + symops: + - x,y,z + - -y+1/4,x+3/4,z+1/4 + - -x+1/2,-y,z+1/2 + - y+1/4,-x+1/4,z+3/4 + - x,-y,-z+1/2 + - y+1/4,x+3/4,-z+3/4 + - -x+1/2,y,-z + - -y+1/4,-x+1/4,-z+1/4 + - z,x,y + - -x+1/4,z+3/4,y+1/4 + - -z+1/2,-x,y+1/2 + - x+1/4,-z+1/4,y+3/4 + - z,-x,-y+1/2 + - x+1/4,z+3/4,-y+3/4 + - -z+1/2,x,-y + - -x+1/4,-z+1/4,-y+1/4 + - y,z,x + - y+1/2,-z+1/2,-x + - z+3/4,y+1/4,-x+1/4 + - -y,z+1/2,-x+1/2 + - -z+1/4,-y+1/4,-x+1/4 + - -y+1/2,-z,x+1/2 + - z+3/4,-y+3/4,x+1/4 + - -z+3/4,y+1/4,x+3/4 + - -x,-y,-z + - y-1/4,-x-3/4,-z-1/4 + - x-1/2,y,-z-1/2 + - -y-1/4,x-1/4,-z-3/4 + - -x,y,z-1/2 + - -y-1/4,-x-3/4,z-3/4 + - x-1/2,-y,z + - y-1/4,x-1/4,z-1/4 + - -z,-x,-y + - x-1/4,-z-3/4,-y-1/4 + - z-1/2,x,-y-1/2 + - -x-1/4,z-1/4,-y-3/4 + - -z,x,y-1/2 + - -x-1/4,-z-3/4,y-3/4 + - z-1/2,-x,y + - x-1/4,z-1/4,y-1/4 + - -y,-z,-x + - -y-1/2,z-1/2,x + - -z-3/4,-y-1/4,x-1/4 + - y,-z-1/2,x-1/2 + - z-1/4,y-1/4,x-1/4 + - y-1/2,z,-x-1/2 + - -z-3/4,y-3/4,-x-1/4 + - z-3/4,-y-1/4,-x-3/4 + - x+1/2,y+1/2,z+1/2 + - -y+3/4,x+5/4,z+3/4 + - -x+1,-y+1/2,z+1 + - y+3/4,-x+3/4,z+5/4 + - x+1/2,-y+1/2,-z+1 + - y+3/4,x+5/4,-z+5/4 + - -x+1,y+1/2,-z+1/2 + - -y+3/4,-x+3/4,-z+3/4 + - z+1/2,x+1/2,y+1/2 + - -x+3/4,z+5/4,y+3/4 + - -z+1,-x+1/2,y+1 + - x+3/4,-z+3/4,y+5/4 + - z+1/2,-x+1/2,-y+1 + - x+3/4,z+5/4,-y+5/4 + - -z+1,x+1/2,-y+1/2 + - -x+3/4,-z+3/4,-y+3/4 + - y+1/2,z+1/2,x+1/2 + - y+1,-z+1,-x+1/2 + - z+5/4,y+3/4,-x+3/4 + - -y+1/2,z+1,-x+1 + - -z+3/4,-y+3/4,-x+3/4 + - -y+1,-z+1/2,x+1 + - z+5/4,-y+5/4,x+3/4 + - -z+5/4,y+3/4,x+5/4 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/4,-x-1/4,-z+1/4 + - x,y+1/2,-z + - -y+1/4,x+1/4,-z-1/4 + - -x+1/2,y+1/2,z + - -y+1/4,-x-1/4,z-1/4 + - x,-y+1/2,z+1/2 + - y+1/4,x+1/4,z+1/4 + - -z+1/2,-x+1/2,-y+1/2 + - x+1/4,-z-1/4,-y+1/4 + - z,x+1/2,-y + - -x+1/4,z+1/4,-y-1/4 + - -z+1/2,x+1/2,y + - -x+1/4,-z-1/4,y-1/4 + - z,-x+1/2,y+1/2 + - x+1/4,z+1/4,y+1/4 + - -y+1/2,-z+1/2,-x+1/2 + - -y,z,x+1/2 + - -z-1/4,-y+1/4,x+1/4 + - y+1/2,-z,x + - z+1/4,y+1/4,x+1/4 + - y,z+1/2,-x + - -z-1/4,y-1/4,-x+1/4 + - z-1/4,-y+1/4,-x-1/4 + universal_h_m: I a -3 d +- crystal_class: triclinic + hall: P 1 (1/2*x+1/2*y,1/2*x-1/2*y,-z) + hermann_mauguin: C 1 + ncsym: + - x, y, z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + - 1/2+x,1/2+y,z + universal_h_m: C 1 +- crystal_class: triclinic + hall: -P 1 (-x,-1/2*y+1/2*z,1/2*y+1/2*z) + hermann_mauguin: A -1 + ncsym: + - x, y, z + - -x, -y, -z + number: 2 + schoenflies: Ci^1 + symops: + - x,y,z + - -x,-y,-z + - x,1/2+y,1/2+z + - -x,1/2-y,1/2-z + universal_h_m: A -1 +- crystal_class: triclinic + hall: -P 1 (-1/2*x+1/2*z,-y,1/2*x+1/2*z) + hermann_mauguin: B -1 + ncsym: + - x, y, z + - -x, -y, -z + number: 2 + schoenflies: Ci^1 + symops: + - x, y, z + - x+1/2, y, z+1/2 + - -x, -y, -z + - -x+1/2, -y, -z+1/2 + universal_h_m: B -1 +- crystal_class: triclinic + hall: -P 1 (-1/2*x+1/2*y+1/2*z,1/2*x-1/2*y+1/2*z,1/2*x+1/2*y-1/2*z) + hermann_mauguin: I -1 + ncsym: + - x,y,z + - -x,-y,-z + number: 2 + schoenflies: D2^4 + symops: + - x,y,z + - 1/2-x,1/2-y,1/2-z + - 1/2+x,1/2+y,1/2+z + - -x,-y,-z + universal_h_m: I -1 +- crystal_class: rhombohedral + hall: -C 2yc (x+y-16/3*z,-x+y+16/3*z,1/3*z) + hermann_mauguin: R 1 2/c 1 ("rhombohedral" setting) + ncsym: + - x, y, z + - y, x, -z+1/2 + - -x, -y, -z + - -y, -x, z-1/2 + number: 15 + schoenflies: C2h^6 + symops: + - x, y, z + - y, x, -z+1/2 + - x+2/3, y+1/3, z+1/3 + - y+2/3, x+1/3, -z+5/6 + - x+1/3, y+2/3, z+2/3 + - y+1/3, x+2/3, -z+7/6 + - -x, -y, -z + - -y, -x, z-1/2 + - -x+2/3, -y+1/3, -z+1/3 + - -y+2/3, -x+1/3, z-1/6 + - -x+1/3, -y+2/3, -z+2/3 + - -y+1/3, -x+2/3, z+1/6 + universal_h_m: R 1 2/c 1 +- crystal_class: orthorhombic + hall: " P 2ac 2ab (x,y,z+1/4)" + hermann_mauguin: P 21 21 21 (origin shift x,y,z+1/4) + ncsym: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x+1/2,-y,z+1/2 + number: 19 + schoenflies: D2^4 + symops: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z + - -x+1/2,-y,z+1/2 + universal_h_m: P 21 21 21 (origin shift x,y,z+1/4) +- crystal_class: monoclinic + hall: P 2yb (1/2*x,y,-1/2*x+z) + hermann_mauguin: B 1 21 1 + ncsym: + - x, y, z + - -x, y+1/2, -z + number: 4 + schoenflies: C2^2 + symops: + - x, y, z + - -x, y+1/2, -z + - x+1/2, y, z+1/2 + - -x+1/2, y+1/2, -z+1/2 + universal_h_m: B 1 21 1 +- crystal_class: triclinic + hall: -P 1 (1/2*x+1/2*y,1/2*x-1/2*y,-z) + hermann_mauguin: C -1 + ncsym: + - x, y, z + - -x, -y, -z + number: 2 + schoenflies: Ci^1 + symops: + - x, y, z + - x+1/2, y+1/2, z + - -x, -y, -z + - -x+1/2, -y+1/2, -z + universal_h_m: C -1 +- crystal_class: monoclinic + hall: -P 2yb (1/2*x,y,-1/2*x+z) + hermann_mauguin: B 1 21/m 1 + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,-y-1/2,z+1/2 + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y-1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,-y-1/2,z+1/2 + universal_h_m: B 1 21/m 1 +- crystal_class: triclinic + hall: " P 1 (-x,-1/2*y+1/2*z,1/2*y+1/2*z)" + hermann_mauguin: P 1 (-a,-b+c,b+c) + ncsym: + - x,y,z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + - x,y+1/2,z+1/2 + universal_h_m: P 1 (-a,-b+c,b+c) +- crystal_class: triclinic + hall: " P 1 (-1/2*x+1/2*z,-y,1/2*x+1/2*z)" + hermann_mauguin: P 1 (-a+c,-b,a+c) + ncsym: + - x,y,z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + - x+1/2,y,z+1/2 + universal_h_m: P 1 (-a+c,-b,a+c) +- crystal_class: triclinic + hall: " P 1 (-1/2*x+1/2*y+1/2*z,1/2*x-1/2*y+1/2*z,1/2*x+1/2*y-1/2*z)" + hermann_mauguin: P 1 (b+c,a+c,a+b) + ncsym: + - x,y,z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + - x+1/2,y+1/2,z+1/2 + universal_h_m: P 1 (b+c,a+c,a+b) +- crystal_class: triclinic + hall: " P 1 (1/2*y+1/2*z,1/2*x+1/2*z,1/2*x+1/2*y)" + hermann_mauguin: P 1 (-a+b+c,a-b+c,a+b-c) + ncsym: + - x,y,z + number: 1 + schoenflies: C1^1 + symops: + - x,y,z + - x,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + universal_h_m: P 1 (-a+b+c,a-b+c,a+b-c) +- crystal_class: triclinic + hall: -P 1 (1/2*y+1/2*z,1/2*x+1/2*z,1/2*x+1/2*y) + hermann_mauguin: P -1 (-a+b+c,a-b+c,a+b-c) + ncsym: + - x,y,z + - -x,-y,-z + number: 2 + schoenflies: Ci^1 + symops: + - x,y,z + - -x,-y,-z + - x,y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,-z + universal_h_m: P -1 (-a+b+c,a-b+c,a+b-c) +- crystal_class: monoclinic + hall: " P 2y (1/2*x,y,-1/2*x+z)" + hermann_mauguin: P 1 2 1 (2*a+c,b,c) + ncsym: + - x,y,z + - -x,y,-z + number: 3 + schoenflies: C2^1 + symops: + - x,y,z + - -x,y,-z + - x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + universal_h_m: P 1 2 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: " C 2y (x-1/2*z,y,1/2*z)" + hermann_mauguin: C 1 2 1 (a,b,a+2*c) + ncsym: + - x,y,z + - -x,y,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,y,-z + - x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + universal_h_m: C 1 2 1 (a,b,a+2*c) +- crystal_class: monoclinic + hall: " P 2y (-1/2*x+z,1/2*x,y)" + hermann_mauguin: P 1 2 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x,-y,z + number: 3 + schoenflies: C2^1 + symops: + - x,y,z + - -x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + universal_h_m: P 1 2 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: " C 2y (1/2*z,x-1/2*z,y)" + hermann_mauguin: C 1 2 1 (a+2*c,a,b) + ncsym: + - x,y,z + - -x,-y,z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y,z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + universal_h_m: C 1 2 1 (a+2*c,a,b) +- crystal_class: monoclinic + hall: " C 2y (z,y+1/4,-x-1/4)" + hermann_mauguin: C 1 2 1 (c-1/4,b-1/4,-a) + ncsym: + - x,y,z + - -x,y+1/2,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,y,-z+1/2 + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + universal_h_m: C 1 2 1 (c-1/4,b-1/4,-a) +- crystal_class: monoclinic + hall: " C 2y (x+1/4,y+1/4,z)" + hermann_mauguin: C 1 2 1 (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,y+1/2,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x+1/2,y,-z + - x+1/2,y+1/2,z + - -x,y+1/2,-z + universal_h_m: C 1 2 1 (a-1/4,b-1/4,c) +- crystal_class: monoclinic + hall: " C 2y (x+1/4,y+1/4,-x+z-1/4)" + hermann_mauguin: C 1 2 1 (a+c-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,y+1/2,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + universal_h_m: C 1 2 1 (a+c-1/4,b-1/4,c) +- crystal_class: monoclinic + hall: " C 2y (x-1/2*z+1/4,y+1/4,1/2*z)" + hermann_mauguin: C 1 2 1 (a-1/4,b-1/4,a+2*c) + ncsym: + - x,y,z + - -x,y+1/2,-z + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x+1/2,y,-z + - x+1/2,y,z+1/2 + - -x,y,-z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + universal_h_m: C 1 2 1 (a-1/4,b-1/4,a+2*c) +- crystal_class: monoclinic + hall: " C 2y (z,x+1/4,y+1/4)" + hermann_mauguin: C 1 2 1 (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + universal_h_m: C 1 2 1 (c-1/4,a-1/4,b) +- crystal_class: monoclinic + hall: " C 2y (-x-1/4,z,y+1/4)" + hermann_mauguin: C 1 2 1 (-a-1/4,c-1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + universal_h_m: C 1 2 1 (-a-1/4,c-1/4,b) +- crystal_class: monoclinic + hall: " P 2yb (-1/2*x+z,1/2*x,y)" + hermann_mauguin: P 1 21 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 4 + schoenflies: C2^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + universal_h_m: P 1 21 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: " C 2y (-x+z-1/4,x+1/4,y+1/4)" + hermann_mauguin: C 1 2 1 (c-1/4,a+c-1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + universal_h_m: C 1 2 1 (c-1/4,a+c-1/4,b) +- crystal_class: monoclinic + hall: " C 2y (1/2*z,x-1/2*z+1/4,y+1/4)" + hermann_mauguin: C 1 2 1 (a+2*c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + number: 5 + schoenflies: C2^3 + symops: + - x,y,z + - -x,-y+1/2,z + - x+1/2,y+1/2,z + - -x+1/2,-y,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + universal_h_m: C 1 2 1 (a+2*c-1/4,a-1/4,b) +- crystal_class: monoclinic + hall: " P -2y (1/2*x,y,-1/2*x+z)" + hermann_mauguin: P 1 m 1 (2*a+c,b,c) + ncsym: + - x,y,z + - x,-y,z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - x,-y,z + - x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P 1 m 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: " C -2y (x-1/2*z,y,1/2*z)" + hermann_mauguin: C 1 m 1 (a,b,a+2*c) + ncsym: + - x,y,z + - x,-y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y,z + - x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: C 1 m 1 (a,b,a+2*c) +- crystal_class: monoclinic + hall: " P -2y (-1/2*x+z,1/2*x,y)" + hermann_mauguin: P 1 m 1 (c,2*a+c,b) + ncsym: + - x,y,z + - x,y,-z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - x,y,-z + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + universal_h_m: P 1 m 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: " C -2y (1/2*z,x-1/2*z,y)" + hermann_mauguin: C 1 m 1 (a+2*c,a,b) + ncsym: + - x,y,z + - x,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z + - x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,y,-z+1/2 + universal_h_m: C 1 m 1 (a+2*c,a,b) +- crystal_class: monoclinic + hall: " P -2y (y,-1/2*x+z,1/2*x)" + hermann_mauguin: P 1 m 1 (b,c,2*a+c) + ncsym: + - x,y,z + - -x,y,z + number: 6 + schoenflies: Cs^1 + symops: + - x,y,z + - -x,y,z + - x,y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: P 1 m 1 (b,c,2*a+c) +- crystal_class: monoclinic + hall: " C -2y (y,1/2*z,x-1/2*z)" + hermann_mauguin: C 1 m 1 (b,a+2*c,a) + ncsym: + - x,y,z + - -x,y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x,y,z + - x,y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,z + universal_h_m: C 1 m 1 (b,a+2*c,a) +- crystal_class: monoclinic + hall: " C -2y (z,y+1/4,-x-1/4)" + hermann_mauguin: C 1 m 1 (c-1/4,b-1/4,-a) + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: C 1 m 1 (c-1/4,b-1/4,-a) +- crystal_class: monoclinic + hall: " P -2yc (1/2*x,y,-1/2*x+z)" + hermann_mauguin: P 1 c 1 (2*a+c,b,c) + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,-y,z + universal_h_m: P 1 c 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: " C -2y (x-1/2*z+1/4,y+1/4,1/2*z)" + hermann_mauguin: C 1 m 1 (a-1/4,b-1/4,a+2*c) + ncsym: + - x,y,z + - x,-y,z+1/2 + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y+1/2,z + - x+1/2,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: C 1 m 1 (a-1/4,b-1/4,a+2*c) +- crystal_class: monoclinic + hall: " C -2y (x+1/4,y+1/4,-x+z-1/4)" + hermann_mauguin: C 1 m 1 (a+c-1/4,b-1/4,c) + ncsym: + - x,y,z + - x+1/2,-y,z+1/2 + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: C 1 m 1 (a+c-1/4,b-1/4,c) +- crystal_class: monoclinic + hall: " C -2y (x+1/4,y+1/4,z)" + hermann_mauguin: C 1 m 1 (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - x+1/2,-y,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - x+1/2,-y,z + universal_h_m: C 1 m 1 (a-1/4,b-1/4,c) +- crystal_class: monoclinic + hall: " C -2y (-x-1/4,z,y+1/4)" + hermann_mauguin: C 1 m 1 (-a-1/4,c-1/4,b) + ncsym: + - x,y,z + - x+1/2,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,y,-z + universal_h_m: C 1 m 1 (-a-1/4,c-1/4,b) +- crystal_class: monoclinic + hall: " P -2yc (-1/2*x+z,1/2*x,y)" + hermann_mauguin: P 1 c 1 (c,2*a+c,b) + ncsym: + - x,y,z + - x+1/2,y,-z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - x+1/2,y,-z + - x+1/2,y+1/2,z + - x,y+1/2,-z + universal_h_m: P 1 c 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: " C -2y (1/2*z,x-1/2*z+1/4,y+1/4)" + hermann_mauguin: C 1 m 1 (a+2*c-1/4,a-1/4,b) + ncsym: + - x,y,z + - x+1/2,y,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z+1/2 + - x+1/2,y+1/2,z + - x+1/2,y+1/2,-z+1/2 + - x,y+1/2,z+1/2 + - x,y+1/2,-z + - x+1/2,y,z+1/2 + - x+1/2,y,-z + universal_h_m: C 1 m 1 (a+2*c-1/4,a-1/4,b) +- crystal_class: monoclinic + hall: " C -2y (-x+z-1/4,x+1/4,y+1/4)" + hermann_mauguin: C 1 m 1 (c-1/4,a+c-1/4,b) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C 1 m 1 (c-1/4,a+c-1/4,b) +- crystal_class: monoclinic + hall: " C -2y (z,x+1/4,y+1/4)" + hermann_mauguin: C 1 m 1 (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - x,y+1/2,-z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - x,y,-z+1/2 + - x,y+1/2,z+1/2 + - x,y+1/2,-z + universal_h_m: C 1 m 1 (c-1/4,a-1/4,b) +- crystal_class: monoclinic + hall: " P -2yc (y,-1/2*x+z,1/2*x)" + hermann_mauguin: P 1 c 1 (b,c,2*a+c) + ncsym: + - x,y,z + - -x,y+1/2,z + number: 7 + schoenflies: Cs^2 + symops: + - x,y,z + - -x,y+1/2,z + - x,y+1/2,z+1/2 + - -x,y,z+1/2 + universal_h_m: P 1 c 1 (b,c,2*a+c) +- crystal_class: monoclinic + hall: " C -2y (y+1/4,-x-1/4,z)" + hermann_mauguin: C 1 m 1 (b-1/4,-a-1/4,c) + ncsym: + - x,y,z + - -x,y+1/2,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x+1/2,y,z + - x+1/2,y+1/2,z + - -x,y+1/2,z + universal_h_m: C 1 m 1 (b-1/4,-a-1/4,c) +- crystal_class: monoclinic + hall: " C -2y (y+1/4,1/2*z,x-1/2*z+1/4)" + hermann_mauguin: C 1 m 1 (b-1/4,a+2*c-1/4,a) + ncsym: + - x,y,z + - -x,y+1/2,z + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x+1/2,y,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,y,z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,z + universal_h_m: C 1 m 1 (b-1/4,a+2*c-1/4,a) +- crystal_class: monoclinic + hall: " C -2y (y+1/4,-x+z-1/4,x+1/4)" + hermann_mauguin: C 1 m 1 (b-1/4,c-1/4,a+c) + ncsym: + - x,y,z + - -x,y+1/2,z+1/2 + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x+1/2,y,z + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: C 1 m 1 (b-1/4,c-1/4,a+c) +- crystal_class: monoclinic + hall: " C -2y (y+1/4,z,x+1/4)" + hermann_mauguin: C 1 m 1 (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - -x,y,z+1/2 + number: 8 + schoenflies: Cs^3 + symops: + - x,y,z + - -x+1/2,y,z + - x+1/2,y,z+1/2 + - -x,y,z+1/2 + universal_h_m: C 1 m 1 (b-1/4,c-1/4,a) +- crystal_class: monoclinic + hall: -P 2y (1/2*x,y,-1/2*x+z) + hermann_mauguin: P 1 2/m 1 (2*a+c,b,c) + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P 1 2/m 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: -C 2y (x-1/2*z,y,1/2*z) + hermann_mauguin: C 1 2/m 1 (a,b,a+2*c) + ncsym: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,y,-z + - -x,-y,-z + - x,-y,z + - x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: C 1 2/m 1 (a,b,a+2*c) +- crystal_class: monoclinic + hall: -P 2y (-1/2*x+z,1/2*x,y) + hermann_mauguin: P 1 2/m 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + universal_h_m: P 1 2/m 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: -C 2y (1/2*z,x-1/2*z,y) + hermann_mauguin: C 1 2/m 1 (a+2*c,a,b) + ncsym: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y,z + - -x,-y,-z + - x,y,-z + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - x,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + universal_h_m: C 1 2/m 1 (a+2*c,a,b) +- crystal_class: monoclinic + hall: -P 2y (y,-1/2*x+z,1/2*x) + hermann_mauguin: P 1 2/m 1 (b,c,2*a+c) + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 10 + schoenflies: C2h^1 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + - x,y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: P 1 2/m 1 (b,c,2*a+c) +- crystal_class: monoclinic + hall: -C 2y (y,1/2*z,x-1/2*z) + hermann_mauguin: C 1 2/m 1 (b,a+2*c,a) + ncsym: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z + - -x,-y,-z + - -x,y,z + - x,y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,z + universal_h_m: C 1 2/m 1 (b,a+2*c,a) +- crystal_class: monoclinic + hall: -C 2y (z,y-1/4,-x-1/4) + hermann_mauguin: C 1 2/m 1 (c-1/4,b+1/4,-a) + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y+1/2,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x,-y,z+1/2 + universal_h_m: C 1 2/m 1 (c-1/4,b+1/4,-a) +- crystal_class: monoclinic + hall: -C 2y (x+1/4,y-1/4,z) + hermann_mauguin: C 1 2/m 1 (a-1/4,b+1/4,c) + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y+1/2,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,-y,z + universal_h_m: C 1 2/m 1 (a-1/4,b+1/4,c) +- crystal_class: monoclinic + hall: -C 2y (x+1/4,y-1/4,-x+z-1/4) + hermann_mauguin: C 1 2/m 1 (a+c-1/4,b+1/4,c) + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y+1/2,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,-y,z+1/2 + universal_h_m: C 1 2/m 1 (a+c-1/4,b+1/4,c) +- crystal_class: monoclinic + hall: -C 2y (x-1/2*z+1/4,y-1/4,1/2*z) + hermann_mauguin: C 1 2/m 1 (a-1/4,b+1/4,a+2*c) + ncsym: + - x,y,z + - -x,y+1/2,-z + - -x,-y,-z + - x,-y+1/2,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - x,-y+1/2,z + - x+1/2,y,z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,-y,z+1/2 + universal_h_m: C 1 2/m 1 (a-1/4,b+1/4,a+2*c) +- crystal_class: monoclinic + hall: -C 2y (z,x+1/4,y-1/4) + hermann_mauguin: C 1 2/m 1 (c-1/4,a+1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,-y,-z + - x,y+1/2,-z + universal_h_m: C 1 2/m 1 (c-1/4,a+1/4,b) +- crystal_class: monoclinic + hall: -C 2y (-x-1/4,z,y-1/4) + hermann_mauguin: C 1 2/m 1 (-a-1/4,c+1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x+1/2,-y,z + - -x+1/2,-y,-z+1/2 + - x,y,-z+1/2 + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - -x,-y,-z + - x+1/2,y,-z + universal_h_m: C 1 2/m 1 (-a-1/4,c+1/4,b) +- crystal_class: monoclinic + hall: -P 2yb (-1/2*x+z,1/2*x,y) + hermann_mauguin: P 1 21/m 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + universal_h_m: P 1 21/m 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: -C 2y (-x+z-1/4,x+1/4,y-1/4) + hermann_mauguin: C 1 2/m 1 (c-1/4,a+c+1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + universal_h_m: C 1 2/m 1 (c-1/4,a+c+1/4,b) +- crystal_class: monoclinic + hall: -C 2y (1/2*z,x-1/2*z+1/4,y-1/4) + hermann_mauguin: C 1 2/m 1 (a+2*c-1/4,a+1/4,b) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,-y,-z + - x,y,-z+1/2 + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z + - -x+1/2,-y,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,-y,-z + - x,y+1/2,-z + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y,-z + universal_h_m: C 1 2/m 1 (a+2*c-1/4,a+1/4,b) +- crystal_class: monoclinic + hall: -P 2yb (y,-1/2*x+z,1/2*x) + hermann_mauguin: P 1 21/m 1 (b,c,2*a+c) + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + number: 11 + schoenflies: C2h^2 + symops: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + - x,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: P 1 21/m 1 (b,c,2*a+c) +- crystal_class: monoclinic + hall: -C 2y (y-1/4,z,x+1/4) + hermann_mauguin: C 1 2/m 1 (b-1/4,c+1/4,a) + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+1/2,y,z + - x+1/2,y,z+1/2 + - x+1/2,-y,-z + - -x,-y,-z + - -x,y,z+1/2 + universal_h_m: C 1 2/m 1 (b-1/4,c+1/4,a) +- crystal_class: monoclinic + hall: -C 2y (y-1/4,-x-1/4,z) + hermann_mauguin: C 1 2/m 1 (b-1/4,-a+1/4,c) + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+1/2,y,z + - x+1/2,y+1/2,z + - x+1/2,-y,-z + - -x,-y,-z + - -x,y+1/2,z + universal_h_m: C 1 2/m 1 (b-1/4,-a+1/4,c) +- crystal_class: monoclinic + hall: -C 2y (y-1/4,-x+z-1/4,x+1/4) + hermann_mauguin: C 1 2/m 1 (b-1/4,c+1/4,a+c) + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y,-z + - -x,-y,-z + - -x,y+1/2,z+1/2 + universal_h_m: C 1 2/m 1 (b-1/4,c+1/4,a+c) +- crystal_class: monoclinic + hall: -C 2y (y-1/4,1/2*z,x-1/2*z+1/4) + hermann_mauguin: C 1 2/m 1 (b-1/4,a+2*c+1/4,a) + ncsym: + - x,y,z + - x+1/2,-y,-z + - -x,-y,-z + - -x+1/2,y,z + number: 12 + schoenflies: C2h^3 + symops: + - x,y,z + - x,-y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+1/2,y,z + - x,y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,-y,-z + - -x,-y,-z + - -x,y,z+1/2 + - x+1/2,y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x,y+1/2,z + universal_h_m: C 1 2/m 1 (b-1/4,a+2*c+1/4,a) +- crystal_class: monoclinic + hall: -P 2yc (1/2*x,y,-1/2*x+z) + hermann_mauguin: P 1 2/c 1 (2*a+c,b,c) + ncsym: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z+1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,-y,z + universal_h_m: P 1 2/c 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: -P 2yc (-1/2*x+z,1/2*x,y) + hermann_mauguin: P 1 2/c 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x+1/2,y,-z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x+1/2,-y,z + - -x,-y,-z + - x+1/2,y,-z + - x+1/2,y+1/2,z + - -x,-y+1/2,z + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + universal_h_m: P 1 2/c 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: -P 2yc (y,-1/2*x+z,1/2*x) + hermann_mauguin: P 1 2/c 1 (b,c,2*a+c) + ncsym: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y+1/2,z + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - x,-y+1/2,-z + - -x,-y,-z + - -x,y+1/2,z + - x,y+1/2,z+1/2 + - x,-y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x,y,z+1/2 + universal_h_m: P 1 2/c 1 (b,c,2*a+c) +- crystal_class: monoclinic + hall: -P 2ybc (1/2*x,y,-1/2*x+z) + hermann_mauguin: P 1 21/c 1 (2*a+c,b,c) + ncsym: + - x,y,z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,-y+1/2,z+1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: P 1 21/c 1 (2*a+c,b,c) +- crystal_class: monoclinic + hall: -P 2ybc (-1/2*x+z,1/2*x,y) + hermann_mauguin: P 1 21/c 1 (c,2*a+c,b) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - x+1/2,y,-z+1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z+1/2 + universal_h_m: P 1 21/c 1 (c,2*a+c,b) +- crystal_class: monoclinic + hall: -P 2ybc (y,-1/2*x+z,1/2*x) + hermann_mauguin: P 1 21/c 1 (b,c,2*a+c) + ncsym: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x+1/2,y+1/2,z + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y,-z + - -x+1/2,y+1/2,z + - x,y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: P 1 21/c 1 (b,c,2*a+c) +- crystal_class: orthorhombic + hall: " A 2 -2 (x,y-1/4,z+1/4)" + hermann_mauguin: A m m 2 (a,b+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: A m m 2 (a,b+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2b (y-1/4,-x,z+1/4)" + hermann_mauguin: A e m 2 (b,-a+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,z + - -x,y,z + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - x,-y,z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: A e m 2 (b,-a+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2a (x+1/4,y+1/4,z-1/4)" + hermann_mauguin: I m a 2 (a-1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,y,z + - x+1/2,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: I m a 2 (a-1/4,b-1/4,c+1/4) +- crystal_class: orthorhombic + hall: " F 2 -2 (x,y+1/4,z+1/4)" + hermann_mauguin: F m m 2 (a,b-1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z + - x,-y,z+1/2 + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z + - -x+1/2,y+1/2,z + - x+1/2,-y,z + universal_h_m: F m m 2 (a,b-1/4,c-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2b (x,y-1/4,z+1/4)" + hermann_mauguin: A e m 2 (a,b+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,y+1/2,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: A e m 2 (a,b+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2 (y-1/4,-x,z+1/4)" + hermann_mauguin: A m m 2 (b,-a+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,z + - -x+1/2,y,z + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y,z+1/2 + - -x,y,z+1/2 + universal_h_m: A m m 2 (b,-a+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2a (y+1/4,-x-1/4,z-1/4)" + hermann_mauguin: I m a 2 (b-1/4,-a-1/4,c+1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -x,y,z+1/2 + universal_h_m: I m a 2 (b-1/4,-a-1/4,c+1/4) +- crystal_class: orthorhombic + hall: " F 2 -2 (x-1/4,y,z-1/4)" + hermann_mauguin: F m m 2 (a+1/4,b,c+1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x,-y,z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x+1/2,-y,z + - -x+1/2,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - -x,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z + - -x,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: F m m 2 (a+1/4,b,c+1/4) +- crystal_class: orthorhombic + hall: " A 2 -2b (-x,z+1/4,y-1/4)" + hermann_mauguin: A e m 2 (-a,c+1/4,b-1/4) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,y,z+1/2 + - x,y,-z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x,y+1/2,z + - x,y+1/2,-z+1/2 + universal_h_m: A e m 2 (-a,c+1/4,b-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2 (y-1/4,z+1/4,x)" + hermann_mauguin: A m m 2 (b,c+1/4,a-1/4) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x+1/2,y,-z + - x,y,-z + - -x+1/2,y,z + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + universal_h_m: A m m 2 (b,c+1/4,a-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2a (y+1/4,z-1/4,x+1/4)" + hermann_mauguin: I m a 2 (b-1/4,c-1/4,a+1/4) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y,-z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + universal_h_m: I m a 2 (b-1/4,c-1/4,a+1/4) +- crystal_class: orthorhombic + hall: " F 2 -2 (y+1/4,z+1/4,x)" + hermann_mauguin: F m m 2 (b,c-1/4,a-1/4) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z + - -x,y+1/2,-z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x+1/2,y,-z + - x,y,-z + - -x+1/2,y,z + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x,y,z+1/2 + universal_h_m: F m m 2 (b,c-1/4,a-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2 (-x,z+1/4,y-1/4)" + hermann_mauguin: A m m 2 (-a,c+1/4,b-1/4) + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 38 + schoenflies: C2v^14 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x,y,z + - x,y,-z+1/2 + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x,y+1/2,z+1/2 + - x,y+1/2,-z + universal_h_m: A m m 2 (-a,c+1/4,b-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2b (y-1/4,z+1/4,x)" + hermann_mauguin: A e m 2 (b,c+1/4,a-1/4) + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 39 + schoenflies: C2v^15 + symops: + - x,y,z + - -x+1/2,y,-z + - x+1/2,y,-z + - -x,y,z + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z + universal_h_m: A e m 2 (b,c+1/4,a-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2a (-x-1/4,z-1/4,y+1/4)" + hermann_mauguin: I m a 2 (-a-1/4,c-1/4,b+1/4) + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 46 + schoenflies: C2v^22 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,y,z + - x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x,y+1/2,-z + universal_h_m: I m a 2 (-a-1/4,c-1/4,b+1/4) +- crystal_class: orthorhombic + hall: " F 2 -2 (y,z-1/4,x-1/4)" + hermann_mauguin: F m m 2 (b+1/4,c,a+1/4) + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y,z + - -x,y+1/2,-z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x,y,-z+1/2 + - x,y,-z+1/2 + - -x,y,z + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - x,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y,-z + - x+1/2,y,-z + - -x+1/2,y,z+1/2 + universal_h_m: F m m 2 (b+1/4,c,a+1/4) +- crystal_class: orthorhombic + hall: " F 2 -2 (x-1/4,y-1/4,z+1/2)" + hermann_mauguin: F m m 2 (a+1/4,b+1/4,c+1/2) + ncsym: + - x,y,z + - -x,-y,z + - -x,y,z+1/2 + - x,-y,z+1/2 + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x+1/2,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: F m m 2 (a+1/4,b+1/4,c+1/2) +- crystal_class: orthorhombic + hall: " F 2 -2 (y-1/4,z+1/2,x-1/4)" + hermann_mauguin: F m m 2 (b+1/4,c+1/4,a+1/2) + ncsym: + - x,y,z + - x,y+1/2,-z + - -x,y+1/2,z + - -x,y,-z + number: 42 + schoenflies: C2v^18 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x+1/2,y+1/2,z + - -x,y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,y,-z + - x+1/2,y,-z + - -x,y,z+1/2 + universal_h_m: F m m 2 (b+1/4,c+1/4,a+1/2) +- crystal_class: orthorhombic + hall: " C 2 -2 (x+1/4,y+1/4,z)" + hermann_mauguin: C m m 2 (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,-y,z + - -x+1/2,y,z + - x+1/2,-y,z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x+1/2,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -x,-y,z + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: C m m 2 (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: " C 2 -2 (y+1/4,z,x+1/4)" + hermann_mauguin: C m m 2 (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - x,y,-z+1/2 + - -x,y,z+1/2 + - -x,y,-z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x+1/2,y,z+1/2 + - -x,y,-z + - x+1/2,y,-z + - -x,y,z+1/2 + universal_h_m: C m m 2 (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: " A 2 -2ab (x,y-1/4,z+1/4)" + hermann_mauguin: A e a 2 (a,b+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x,-y+1/2,z + - -x+1/2,y+1/2,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: A e a 2 (a,b+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (y+1/4,-x-1/4,z)" + hermann_mauguin: C m c 21 (b-1/4,-a-1/4,c) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z+1/2 + - x+1/2,-y,z + - -x,y+1/2,z+1/2 + universal_h_m: C m c 21 (b-1/4,-a-1/4,c) +- crystal_class: orthorhombic + hall: " I 2 -2c (x+1/4,y+1/4,z-1/4)" + hermann_mauguin: I b a 2 (a-1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z + number: 45 + schoenflies: C2v^21 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x+1/2,y,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: I b a 2 (a-1/4,b-1/4,c+1/4) +- crystal_class: orthorhombic + hall: " A 2 -2ab (y-1/4,-x,z+1/4)" + hermann_mauguin: A e a 2 (b,-a+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y+1/2,z + - x,-y+1/2,z+1/2 + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y+1/2,z + - -x,y+1/2,z + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - x,-y+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: A e a 2 (b,-a+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (x+1/4,y+1/4,z)" + hermann_mauguin: C m c 21 (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x,y+1/2,z + - x,-y+1/2,z+1/2 + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z+1/2 + universal_h_m: C m c 21 (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: " C 2c -2 (-x-1/4,z,y+1/4)" + hermann_mauguin: C m c 21 (-a-1/4,c-1/4,b) + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - -x,y+1/2,-z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x,y+1/2,-z + - -x,y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c 21 (-a-1/4,c-1/4,b) +- crystal_class: orthorhombic + hall: " A 2 -2ab (y-1/4,z+1/4,x)" + hermann_mauguin: A e a 2 (b,c+1/4,a-1/4) + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - -x,y+1/2,-z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x+1/2,y,-z + - x+1/2,y,-z+1/2 + - -x,y,z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: A e a 2 (b,c+1/4,a-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2c (y+1/4,z-1/4,x+1/4)" + hermann_mauguin: I b a 2 (b-1/4,c-1/4,a+1/4) + ncsym: + - x,y,z + - x,y+1/2,-z+1/2 + - -x,y,z+1/2 + - -x,y+1/2,-z + number: 45 + schoenflies: C2v^21 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + - x+1/2,y,-z + - -x,y,z+1/2 + universal_h_m: I b a 2 (b-1/4,c-1/4,a+1/4) +- crystal_class: orthorhombic + hall: " A 2 -2ab (-x,z+1/4,y-1/4)" + hermann_mauguin: A e a 2 (-a,c+1/4,b-1/4) + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y+1/2,z + - -x,y+1/2,-z + number: 41 + schoenflies: C2v^17 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,y,-z + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,y+1/2,-z+1/2 + universal_h_m: A e a 2 (-a,c+1/4,b-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (y+1/4,z,x+1/4)" + hermann_mauguin: C m c 21 (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - x+1/2,y,-z + - -x+1/2,y+1/2,z + - -x,y+1/2,-z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y+1/2,-z + - x+1/2,y,-z + - -x,y+1/2,z+1/2 + universal_h_m: C m c 21 (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: " C 2 -2c (x+1/4,y+1/4,z)" + hermann_mauguin: C c c 2 (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,-y,z + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + number: 37 + schoenflies: C2v^13 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x+1/2,y,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: C c c 2 (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: " C 2 -2c (y+1/4,z,x+1/4)" + hermann_mauguin: C c c 2 (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - -x,y,-z + number: 37 + schoenflies: C2v^13 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + universal_h_m: C c c 2 (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: " A 2 -2a (x-1/4,y-1/4,z+1/4)" + hermann_mauguin: A m a 2 (a+1/4,b+1/4,c-1/4) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,y,z + - x+1/2,-y,z+1/2 + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - -x,y,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: A m a 2 (a+1/4,b+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (x,y-1/4,z)" + hermann_mauguin: C m c 21 (a,b+1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,y,z + - x+1/2,-y,z+1/2 + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y,z + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y,z+1/2 + universal_h_m: C m c 21 (a,b+1/4,c) +- crystal_class: orthorhombic + hall: " I 2 -2 (x,y+1/4,z)" + hermann_mauguin: I m m 2 (a,b-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x,y,z + - x+1/2,-y,z+1/2 + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - -x,-y+1/2,z + - -x,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: I m m 2 (a,b-1/4,c) +- crystal_class: orthorhombic + hall: " A 2 -2a (y-1/4,-x+1/4,z+1/4)" + hermann_mauguin: A m a 2 (b+1/4,-a+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,z + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: A m a 2 (b+1/4,-a+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (y-1/4,-x,z)" + hermann_mauguin: C m c 21 (b,-a+1/4,c) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,z + - -x,y+1/2,z+1/2 + universal_h_m: C m c 21 (b,-a+1/4,c) +- crystal_class: orthorhombic + hall: " I 2 -2 (x+1/4,y,z-1/4)" + hermann_mauguin: I m m 2 (a-1/4,b,c+1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x,-y,z + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - -x+1/2,-y,z + - -x+1/2,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m 2 (a-1/4,b,c+1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (y-1/4,z,x)" + hermann_mauguin: C m c 21 (b,c+1/4,a) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - x,y,-z + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: C m c 21 (b,c+1/4,a) +- crystal_class: orthorhombic + hall: " A 2 -2a (y-1/4,z+1/4,x-1/4)" + hermann_mauguin: A m a 2 (b+1/4,c+1/4,a-1/4) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - x,y,-z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + universal_h_m: A m a 2 (b+1/4,c+1/4,a-1/4) +- crystal_class: orthorhombic + hall: " I 2 -2 (y+1/4,z,x)" + hermann_mauguin: I m m 2 (b,c-1/4,a) + ncsym: + - x,y,z + - x,y,-z + - -x,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - -x+1/2,y,-z + - x,y,-z + - -x+1/2,y,z + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: I m m 2 (b,c-1/4,a) +- crystal_class: orthorhombic + hall: " A 2 -2a (-x+1/4,z+1/4,y-1/4)" + hermann_mauguin: A m a 2 (-a+1/4,c+1/4,b-1/4) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x,y,z + - -x+1/2,y+1/2,-z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x,y,z + - x+1/2,y,-z+1/2 + - x,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: A m a 2 (-a+1/4,c+1/4,b-1/4) +- crystal_class: orthorhombic + hall: " C 2c -2 (-x,z,y-1/4)" + hermann_mauguin: C m c 21 (-a,c+1/4,b) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x,y,z + - -x+1/2,y+1/2,-z + number: 36 + schoenflies: C2v^12 + symops: + - x,y,z + - -x,y+1/2,-z+1/2 + - -x,y,z + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c 21 (-a,c+1/4,b) +- crystal_class: orthorhombic + hall: " I 2 -2 (y,z-1/4,x+1/4)" + hermann_mauguin: I m m 2 (b-1/4,c,a+1/4) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z + - -x,y,z + - -x+1/2,y+1/2,-z + number: 44 + schoenflies: C2v^20 + symops: + - x,y,z + - -x,y,-z+1/2 + - x,y,-z+1/2 + - -x,y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + universal_h_m: I m m 2 (b-1/4,c,a+1/4) +- crystal_class: orthorhombic + hall: " A 2 -2a (x,y-1/4,z+1/4)" + hermann_mauguin: A m a 2 (a,b+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x,-y+1/2,z + - -x+1/2,y,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: A m a 2 (a,b+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2a (y-1/4,-x,z+1/4)" + hermann_mauguin: A m a 2 (b,-a+1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z+1/2 + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,z + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: A m a 2 (b,-a+1/4,c-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2a (y-1/4,z+1/4,x)" + hermann_mauguin: A m a 2 (b,c+1/4,a-1/4) + ncsym: + - x,y,z + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -x,y+1/2,-z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x+1/2,y,-z + - x,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: A m a 2 (b,c+1/4,a-1/4) +- crystal_class: orthorhombic + hall: " A 2 -2a (-x,z+1/4,y-1/4)" + hermann_mauguin: A m a 2 (-a,c+1/4,b-1/4) + ncsym: + - x,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + number: 40 + schoenflies: C2v^16 + symops: + - x,y,z + - -x,y,-z+1/2 + - -x+1/2,y,z + - x+1/2,y,-z+1/2 + - x,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: A m a 2 (-a,c+1/4,b-1/4) +- crystal_class: orthorhombic + hall: -C 2 2c (z+1/4,x,y) + hermann_mauguin: C c c m (c,a,b-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - x,-y,-z + - -x,y,-z + - -x,-y,z + - -x+1/2,-y,-z + - -x+1/2,y,z + - x+1/2,-y,z + - x+1/2,y,-z + - x,y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + universal_h_m: C c c m (c,a,b-1/4) +- crystal_class: orthorhombic + hall: -C 2 2c (y,z+1/4,x) + hermann_mauguin: C c c m (b,c,a-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x,y,-z + - -x,-y,z + - x,-y,-z + - -x,-y+1/2,-z + - x,-y+1/2,z + - x,y+1/2,-z + - -x,y+1/2,z + - x+1/2,y,z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + universal_h_m: C c c m (b,c,a-1/4) +- crystal_class: orthorhombic + hall: -C 2 2c (x,y,z+1/4) + hermann_mauguin: C c c m (a,b,c-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z+1/2 + - x,y,-z+1/2 + - -x,y,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: C c c m (a,b,c-1/4) +- crystal_class: orthorhombic + hall: -F 2 2 (x+1/4,y+1/4,z+1/4) + hermann_mauguin: F m m m (a-1/4,b-1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 69 + schoenflies: D2h^23 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y,-z + - -x,-y+1/2,-z + - x+1/2,y,-z + - -x,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: F m m m (a-1/4,b-1/4,c-1/4) +- crystal_class: orthorhombic + hall: -C 2 2c (z,x+1/4,y+1/4) + hermann_mauguin: C c c m (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,z + - -x,-y+1/2,-z+1/2 + - -x,y,z + - x+1/2,-y+1/2,z + - x+1/2,y,-z+1/2 + - x,y+1/2,z+1/2 + - x,-y,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C c c m (c-1/4,a-1/4,b) +- crystal_class: orthorhombic + hall: -C 2 2c (y+1/4,z,x+1/4) + hermann_mauguin: C c c m (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,-y,z + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y,-z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,-y,-z + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + universal_h_m: C c c m (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: -C 2 2c (x+1/4,y+1/4,z) + hermann_mauguin: C c c m (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + number: 66 + schoenflies: D2h^20 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y,-z + - -x+1/2,y,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: C c c m (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: -I 2 2 (x-1/4,y+1/4,z-1/4) + hermann_mauguin: I m m m (a+1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + number: 71 + schoenflies: D2h^25 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: I m m m (a+1/4,b-1/4,c+1/4) +- crystal_class: orthorhombic + hall: -F 2 2 (x-1/4,y-1/4,z) + hermann_mauguin: F m m m (a+1/4,b+1/4,c) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y,-z + - -x,y,z+1/2 + - x,-y,z+1/2 + number: 69 + schoenflies: D2h^23 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - x,y,-z + - -x+1/2,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,y,-z+1/2 + - -x,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: F m m m (a+1/4,b+1/4,c) +- crystal_class: orthorhombic + hall: -F 2 2 (x+1/2,y-1/4,z-1/4) + hermann_mauguin: F m m m (a+1/2,b+1/4,c+1/4) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x,-y,-z + - x+1/2,y,-z + - -x,y,z + - x+1/2,-y,z + number: 69 + schoenflies: D2h^23 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x,y,z + - x,-y+1/2,z + - x,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x,y+1/2,-z + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y,-z + - -x+1/2,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,-y,z + universal_h_m: F m m m (a+1/2,b+1/4,c+1/4) +- crystal_class: orthorhombic + hall: -F 2 2 (x+1/4,y+1/2,z-1/4) + hermann_mauguin: F m m m (a-1/4,b+1/2,c+1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y,-z + - x,y+1/2,-z + - -x,y+1/2,z + - x,-y,z + number: 69 + schoenflies: D2h^23 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y,z + - x,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x,y,-z + - -x,-y,-z + - x+1/2,y,-z + - -x,y,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: F m m m (a-1/4,b+1/2,c+1/4) +- crystal_class: orthorhombic + hall: -I 2 2c (x,y,z-1/4) + hermann_mauguin: I b a m (a,b,c+1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y,-z+1/2 + - x,y,-z+1/2 + - -x,y,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: I b a m (a,b,c+1/4) +- crystal_class: orthorhombic + hall: -C 2 2 (x+1/4,y+1/4,z) + hermann_mauguin: C m m m (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y,z + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - x,y,-z + - -x+1/2,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -x,-y,z + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: C m m m (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: -I 2 2c (x-1/4,y+1/4,z-1/4) + hermann_mauguin: I b a m (a+1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y,z + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z + - x+1/2,-y,z + universal_h_m: I b a m (a+1/4,b-1/4,c+1/4) +- crystal_class: orthorhombic + hall: -I 2 2c (z-1/4,x,y) + hermann_mauguin: I b a m (c,a,b+1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x,-y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - x,-y,-z + - -x,y,-z + - -x,-y,z + - -x+1/2,-y,-z + - -x+1/2,y,z + - x+1/2,-y,z + - x+1/2,y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + universal_h_m: I b a m (c,a,b+1/4) +- crystal_class: orthorhombic + hall: -C 2 2 (z,x+1/4,y+1/4) + hermann_mauguin: C m m m (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,z + - -x,-y+1/2,-z+1/2 + - -x,y,z + - x,-y+1/2,z + - x,y,-z+1/2 + - x,y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z + - -x,-y,z+1/2 + - -x,-y,-z + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + - x,y+1/2,-z + universal_h_m: C m m m (c-1/4,a-1/4,b) +- crystal_class: orthorhombic + hall: -I 2 2c (z-1/4,x-1/4,y+1/4) + hermann_mauguin: I b a m (c+1/4,a-1/4,b+1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - x,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,z + - -x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,z + - x+1/2,-y+1/2,z + - x+1/2,y,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - -x,y+1/2,z+1/2 + - x,-y,z+1/2 + - x,y+1/2,-z + universal_h_m: I b a m (c+1/4,a-1/4,b+1/4) +- crystal_class: orthorhombic + hall: -I 2 2c (y,z-1/4,x) + hermann_mauguin: I b a m (b,c,a+1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x,y,-z + - -x,-y,z + - x,-y,-z + - -x,-y+1/2,-z + - x,-y+1/2,z + - x,y+1/2,-z + - -x,y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y,-z+1/2 + - -x+1/2,y,z+1/2 + universal_h_m: I b a m (b,c,a+1/4) +- crystal_class: orthorhombic + hall: -C 2 2 (y+1/4,z,x+1/4) + hermann_mauguin: C m m m (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y,-z + - -x,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 65 + schoenflies: D2h^19 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,-y,z + - x,y,-z+1/2 + - -x+1/2,y,z + - x+1/2,y,z+1/2 + - -x,y,-z + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x,-y,-z + - x+1/2,-y,z+1/2 + - x+1/2,y,-z + - -x,y,z+1/2 + universal_h_m: C m m m (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: -I 2 2c (y+1/4,z-1/4,x-1/4) + hermann_mauguin: I b a m (b+1/4,c-1/4,a+1/4) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y,-z + - -x,y,z+1/2 + - x+1/2,-y,z+1/2 + number: 72 + schoenflies: D2h^26 + symops: + - x,y,z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,z + - x,-y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - x,-y+1/2,z + - x,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x,y+1/2,-z + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,-y,-z + - x+1/2,-y,z+1/2 + - x+1/2,y,-z + - -x,y,z+1/2 + universal_h_m: I b a m (b+1/4,c-1/4,a+1/4) +- crystal_class: orthorhombic + hall: -C 2c 2 (y+1/4,z,x+1/4) + hermann_mauguin: C m c m (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,z + - x,-y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x,-y+1/2,z + - x,y,-z+1/2 + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y+1/2,-z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z + - -x,-y,-z + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y,-z + - -x,y+1/2,z+1/2 + universal_h_m: C m c m (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: -C 2c 2 (z,y+1/4,-x-1/4) + hermann_mauguin: C m c m (c-1/4,b-1/4,-a) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,-y+1/2,z + - -x+1/2,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x+1/2,y,z + - x,y,-z+1/2 + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - x+1/2,-y,-z + - -x,-y,z+1/2 + - -x+1/2,y+1/2,-z + - -x,-y,-z + - -x+1/2,y+1/2,z+1/2 + - x,y+1/2,-z + - x+1/2,-y,z+1/2 + universal_h_m: C m c m (c-1/4,b-1/4,-a) +- crystal_class: orthorhombic + hall: -C 2c 2 (x+1/4,y+1/4,z) + hermann_mauguin: C m c m (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z+1/2 + universal_h_m: C m c m (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: -C 2c 2 (-x-1/4,z,y+1/4) + hermann_mauguin: C m c m (-a-1/4,c-1/4,b) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,y+1/2,-z+1/2 + - x,-y,-z+1/2 + - -x+1/2,-y+1/2,z + - -x+1/2,-y,-z+1/2 + - x,-y+1/2,z + - -x+1/2,y,z + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x,y+1/2,-z + - x+1/2,-y,-z + - -x,-y+1/2,z+1/2 + - -x,-y,-z + - x+1/2,-y+1/2,z+1/2 + - -x,y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c m (-a-1/4,c-1/4,b) +- crystal_class: orthorhombic + hall: -C 2c 2 (z,x+1/4,y+1/4) + hermann_mauguin: C m c m (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - x+1/2,-y+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x+1/2,-y+1/2,z + - -x,-y+1/2,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z + - x+1/2,y,-z+1/2 + - x,y+1/2,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z + - -x+1/2,-y,z+1/2 + - -x,-y,-z + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c m (c-1/4,a-1/4,b) +- crystal_class: orthorhombic + hall: -C 2c 2 (y+1/4,-x-1/4,z) + hermann_mauguin: C m c m (b-1/4,-a-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/2,y,-z + - x,-y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y,-z+1/2 + - x,-y+1/2,z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y,z+1/2 + - -x,y+1/2,-z + - x+1/2,-y,-z+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y,z + - -x,y+1/2,z+1/2 + universal_h_m: C m c m (b-1/4,-a-1/4,c) +- crystal_class: orthorhombic + hall: -C 2ac 2 (z,x+1/4,y+1/4) + hermann_mauguin: C m c e (c-1/4,a-1/4,b) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x+1/2,y,-z + - -x+1/2,y,z+1/2 + - x,-y,z+1/2 + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x,y,-z+1/2 + - -x+1/2,-y,z + - -x,-y+1/2,-z+1/2 + - -x+1/2,y+1/2,z + - x,-y+1/2,z + - x+1/2,y+1/2,-z+1/2 + - x,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y+1/2,-z + - -x+1/2,-y+1/2,z+1/2 + - -x,-y,-z + - -x+1/2,y,z+1/2 + - x,-y,z+1/2 + - x+1/2,y,-z + universal_h_m: C m c e (c-1/4,a-1/4,b) +- crystal_class: orthorhombic + hall: -C 2ac 2 (-x-1/4,z,y+1/4) + hermann_mauguin: C m c e (-a-1/4,c-1/4,b) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z + - -x,y,z+1/2 + - x,-y+1/2,z+1/2 + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x,y+1/2,-z+1/2 + - x,-y,-z+1/2 + - -x,-y+1/2,z + - -x+1/2,-y,-z+1/2 + - x+1/2,-y+1/2,z + - -x+1/2,y,z + - x+1/2,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z + - x+1/2,-y,-z + - -x+1/2,-y+1/2,z+1/2 + - -x,-y,-z + - x,-y+1/2,z+1/2 + - -x,y,z+1/2 + - x,y+1/2,-z + universal_h_m: C m c e (-a-1/4,c-1/4,b) +- crystal_class: orthorhombic + hall: -C 2ac 2 (y+1/4,z,x+1/4) + hermann_mauguin: C m c e (b-1/4,c-1/4,a) + ncsym: + - x,y,z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y,-z + - x+1/2,y,-z + - -x,y+1/2,z + - x+1/2,-y+1/2,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,z + - x,-y+1/2,-z + - -x+1/2,-y,-z+1/2 + - x,-y+1/2,z+1/2 + - x,y,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,-y+1/2,z + - x+1/2,y,-z + - -x,y+1/2,z + universal_h_m: C m c e (b-1/4,c-1/4,a) +- crystal_class: orthorhombic + hall: -C 2ac 2 (y+1/4,-x-1/4,z) + hermann_mauguin: C m c e (b-1/4,-a-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x,-y,-z+1/2 + - -x+1/2,y,-z + - -x,-y,-z + - x+1/2,y,-z+1/2 + - -x,y,z+1/2 + - x+1/2,-y,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x+1/2,y,-z + - x,-y,-z+1/2 + - -x+1/2,-y+1/2,-z + - x,y+1/2,-z+1/2 + - x,-y+1/2,z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,-z + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z + - x+1/2,y,-z+1/2 + - x+1/2,-y,z + - -x,y,z+1/2 + universal_h_m: C m c e (b-1/4,-a-1/4,c) +- crystal_class: orthorhombic + hall: -C 2ac 2 (x+1/4,y+1/4,z) + hermann_mauguin: C m c e (a-1/4,b-1/4,c) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x,y,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z+1/2 + - -x,y+1/2,z + - x,-y,z+1/2 + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z + - -x,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,y,-z+1/2 + - -x+1/2,y,z + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - x,y+1/2,-z+1/2 + - -x,y+1/2,z + - x,-y,z+1/2 + universal_h_m: C m c e (a-1/4,b-1/4,c) +- crystal_class: orthorhombic + hall: -C 2ac 2 (z,y+1/4,-x-1/4) + hermann_mauguin: C m c e (c-1/4,b-1/4,-a) + ncsym: + - x,y,z + - -x,-y+1/2,z + - x+1/2,-y+1/2,-z + - -x+1/2,y,-z + - -x,-y,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y,z + number: 64 + schoenflies: D2h^18 + symops: + - x,y,z + - x+1/2,-y+1/2,-z + - -x,-y+1/2,z + - -x+1/2,y,-z + - -x,-y+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - x,y,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x,y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,-y,z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x,-y,-z + - -x+1/2,y+1/2,z + - x,y+1/2,-z + - x+1/2,-y,z + universal_h_m: C m c e (c-1/4,b-1/4,-a) +- crystal_class: orthorhombic + hall: -C 2c 2 (z-1/4,x+1/2,y+1/4) + hermann_mauguin: C m c m (c+1/2,a-1/4,b+1/4) + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y,z + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - x+1/2,-y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x,-y,z + - -x+1/2,-y,-z+1/2 + - -x,y,z + - x,-y,z + - x+1/2,y,-z+1/2 + - x,y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x,-y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - -x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c m (c+1/2,a-1/4,b+1/4) +- crystal_class: orthorhombic + hall: -C 2c 2 (-x+1/2,z-1/4,y+1/4) + hermann_mauguin: C m c m (-a+1/2,c-1/4,b+1/4) + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y,z + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,y+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - -x,-y,z + - -x,-y+1/2,-z+1/2 + - x,-y,z + - -x,y,z + - x,y+1/2,-z+1/2 + - x+1/2,y,z+1/2 + - -x+1/2,y+1/2,-z + - x+1/2,-y+1/2,-z + - -x+1/2,-y,z+1/2 + - -x+1/2,-y+1/2,-z + - x+1/2,-y,z+1/2 + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,-z + universal_h_m: C m c m (-a+1/2,c-1/4,b+1/4) +- crystal_class: orthorhombic + hall: -I 2 2 (x,y,z+1/4) + hermann_mauguin: I m m m (a,b,c-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x,y,z + - x,-y,z + number: 71 + schoenflies: D2h^25 + symops: + - x,y,z + - -x,-y,z + - x,-y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z+1/2 + - x,y,-z+1/2 + - -x,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m m (a,b,c-1/4) +- crystal_class: orthorhombic + hall: -C 2c 2 (y+1/4,z-1/4,x+1/2) + hermann_mauguin: C m c m (b+1/2,c-1/4,a+1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y+1/2,z+1/2 + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,z + - x,-y,-z + - -x+1/2,-y+1/2,-z + - x,-y,z + - x,y,-z + - -x+1/2,y+1/2,z + - x+1/2,y,z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y,-z+1/2 + - -x,y+1/2,z+1/2 + universal_h_m: C m c m (b+1/2,c-1/4,a+1/4) +- crystal_class: orthorhombic + hall: -C 2c 2 (y+1/4,-x+1/2,z-1/4) + hermann_mauguin: C m c m (b+1/2,-a-1/4,c+1/4) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y+1/2,z+1/2 + - x,-y,z + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x+1/2,-y,z+1/2 + - -x+1/2,y,-z+1/2 + - x,-y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - x,-y,z + - -x+1/2,y,z+1/2 + - x+1/2,y+1/2,z + - -x,-y+1/2,z+1/2 + - -x,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z + - -x,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - x+1/2,-y+1/2,z + - -x,y+1/2,z+1/2 + universal_h_m: C m c m (b+1/2,-a-1/4,c+1/4) +- crystal_class: orthorhombic + hall: -I 2 2 (x+1/4,y,z) + hermann_mauguin: I m m m (a-1/4,b,c) + ncsym: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y,-z + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y+1/2,z+1/2 + - x,-y,z + number: 71 + schoenflies: D2h^25 + symops: + - x,y,z + - -x+1/2,-y,z + - x,-y,-z + - -x+1/2,y,-z + - -x+1/2,-y,-z + - x,y,-z + - -x+1/2,y,z + - x,-y,z + - x+1/2,y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: I m m m (a-1/4,b,c) +- crystal_class: orthorhombic + hall: -C 2c 2 (z-1/4,y+1/4,-x+1/2) + hermann_mauguin: C m c m (c+1/2,b-1/4,-a+1/4) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - -x,y,z + - x+1/2,-y,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - x+1/2,-y+1/2,-z + - -x+1/2,-y+1/2,z + - -x,y,-z + - -x+1/2,-y+1/2,-z + - -x,y,z + - x,y,-z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,-y,z+1/2 + - -x,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x,y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: C m c m (c+1/2,b-1/4,-a+1/4) +- crystal_class: orthorhombic + hall: -C 2c 2 (x+1/2,y+1/4,z-1/4) + hermann_mauguin: C m c m (a+1/2,b-1/4,c+1/4) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - -x,y,z + - x+1/2,-y,z+1/2 + number: 63 + schoenflies: D2h^17 + symops: + - x,y,z + - -x,-y+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - -x,y,-z + - -x,-y+1/2,-z+1/2 + - x,y,-z + - -x,y,z + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y,-z+1/2 + - x+1/2,y+1/2,-z + - -x+1/2,y+1/2,z + - x+1/2,-y,z+1/2 + universal_h_m: C m c m (a+1/2,b-1/4,c+1/4) +- crystal_class: orthorhombic + hall: -I 2 2 (x,y+1/4,z) + hermann_mauguin: I m m m (a,b-1/4,c) + ncsym: + - x,y,z + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x,y,-z + - -x+1/2,-y,-z+1/2 + - x,y,-z + - -x,y,z + - x+1/2,-y,z+1/2 + number: 71 + schoenflies: D2h^25 + symops: + - x,y,z + - -x,-y+1/2,z + - x,-y+1/2,-z + - -x,y,-z + - -x,-y+1/2,-z + - x,y,-z + - -x,y,z + - x,-y+1/2,z + - x+1/2,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - x+1/2,-y,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: I m m m (a,b-1/4,c) +- crystal_class: tetragonal + hall: -I 4 (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: I 4/m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x+1/2,-z+1/2 + universal_h_m: I 4/m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -P 4 (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 4/m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + number: 83 + schoenflies: C4h^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + universal_h_m: P 4/m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z) + hermann_mauguin: I 4/m (a+b+1/2,-a+b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -x+1/2,-y+1/2,-z + - y+1/2,-x,-z + - x,y,-z + - -y,x+1/2,-z + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -x,-y,-z + - y,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x,-z + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -x,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x,-z+1/2 + universal_h_m: I 4/m (a+b+1/2,-a+b,c) +- crystal_class: tetragonal + hall: -P 4c (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 42/m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + number: 84 + schoenflies: C4h^2 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z+1/2 + universal_h_m: P 42/m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 (x+1/2,y,z) + hermann_mauguin: I 4/m (a+1/2,b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - -x,-y,-z + - y+1/2,-x+1/2,-z + - x,y,-z + - -y+1/2,x+1/2,-z + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z+1/2 + universal_h_m: I 4/m (a+1/2,b,c) +- crystal_class: tetragonal + hall: -I 4 (x+1/2,y,z+1/4) + hermann_mauguin: I 4/m (a+1/2,b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - -x,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + universal_h_m: I 4/m (a+1/2,b,c-1/4) +- crystal_class: tetragonal + hall: -P 4 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 4/m (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + number: 83 + schoenflies: C4h^1 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z + - x,y,-z + - -y+1/2,x,-z + - x+1/2,y+1/2,z + - -y,x+1/2,z + - -x,-y,z + - y+1/2,-x,z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + universal_h_m: P 4/m (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 (x+1/4,y+1/4,z-1/4) + hermann_mauguin: I 4/m (a-1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y,z+1/2 + - y+1/2,-x,z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + universal_h_m: I 4/m (a-1/4,b-1/4,c+1/4) +- crystal_class: tetragonal + hall: -I 4 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z+1/4) + hermann_mauguin: I 4/m (a+b+1/2,-a+b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + number: 87 + schoenflies: C4h^5 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x+1/2,-z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -x,-y,-z+1/2 + - y,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x,-z+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -x,-y+1/2,-z + - y,-x,-z + - x+1/2,y,-z + - -y+1/2,x+1/2,-z + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y,-z + - y+1/2,-x+1/2,-z + - x,y+1/2,-z + - -y,x,-z + universal_h_m: I 4/m (a+b+1/2,-a+b,c-1/4) +- crystal_class: tetragonal + hall: -P 4c (1/2*x+1/2*y,-1/2*x+1/2*y,z+1/4) + hermann_mauguin: P 42/m (a+b,-a+b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + number: 84 + schoenflies: C4h^2 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -x,-y,-z+1/2 + - y,-x,-z + - x,y,-z+1/2 + - -y,x,-z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z + universal_h_m: P 42/m (a+b,-a+b,c-1/4) +- crystal_class: tetragonal + hall: -P 4c (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 42/m (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x,z+1/2 + - -x,-y,-z + - y,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -y+1/2,x,-z+1/2 + number: 84 + schoenflies: C4h^2 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z+1/2 + - x,y,-z + - -y+1/2,x,-z+1/2 + - x+1/2,y+1/2,z + - -y,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x,z+1/2 + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + universal_h_m: P 42/m (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 2 (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: I 4/m m m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - y,x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - -y+1/2,-x,-z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - y+1/2,x,z+1/2 + - -x+1/2,y,z+1/2 + - -y+1/2,-x,z+1/2 + - x+1/2,-y,z+1/2 + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x+1/2,-z+1/2 + - y,x+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x,-y+1/2,z+1/2 + universal_h_m: I 4/m m m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -P 4 2 (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 4/m m m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z + - -y,-x,z + - x,-y,z + - y,x,z + number: 123 + schoenflies: D4h^1 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - y,x,z + - -x,y,z + - -y,-x,z + - x,-y,z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + universal_h_m: P 4/m m m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: I 4/m c m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z+1/2 + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - y,x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - -y+1/2,-x,-z + - x+1/2,-y,-z + - y+1/2,x,-z + - -x+1/2,y,-z + - -x+1/2,-y,-z+1/2 + - y+1/2,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - y+1/2,x,z + - -x+1/2,y,z + - -y+1/2,-x,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - -y,-x+1/2,-z + - x,-y+1/2,-z + - y,x+1/2,-z + - -x,y+1/2,-z + - -x,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x+1/2,-z+1/2 + - y,x+1/2,z + - -x,y+1/2,z + - -y,-x+1/2,z + - x,-y+1/2,z + universal_h_m: I 4/m c m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -P 4 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 4/m c c (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + number: 124 + schoenflies: D4h^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z+1/2 + - x,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - y,-x,-z + - x,y,-z + - -y,x,-z + - y,x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 4/m c c (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 2c (x,y,z-1/4) + hermann_mauguin: I 4/m c m (a,b,c+1/4) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x,-y,-z+1/2 + - y,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x,-z+1/2 + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - y,x,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + universal_h_m: I 4/m c m (a,b,c+1/4) +- crystal_class: tetragonal + hall: -I 4 2 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z) + hermann_mauguin: I 4/m m m (a+b+1/2,-a+b,c) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + - y+1/2,x+1/2,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -y,-x,-z + - x,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x,-z + - x,y,-z + - -y,x+1/2,-z + - y+1/2,x+1/2,z + - -x+1/2,y,z + - -y,-x,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y,-z + - y,x,-z + - -x,y+1/2,-z + - -x,-y,-z + - y,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x,-z + - y,x,z + - -x,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y,z + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -y+1/2,-x,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - y,x+1/2,z+1/2 + - -x,y,z+1/2 + - -y+1/2,-x,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x,-z+1/2 + - y+1/2,x,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: I 4/m m m (a+b+1/2,-a+b,c) +- crystal_class: tetragonal + hall: -P 4 2 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 4/m m m (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + - y+1/2,x+1/2,z + number: 123 + schoenflies: D4h^1 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z + - x,y,-z + - -y+1/2,x,-z + - y,x,z + - -x+1/2,y,z + - -y+1/2,-x+1/2,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -y,x+1/2,z + - -x,-y,z + - y+1/2,-x,z + - -y,-x,-z + - x+1/2,-y,-z + - y+1/2,x+1/2,-z + - -x,y+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - y+1/2,x+1/2,z + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + universal_h_m: P 4/m m m (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 2c (x+1/4,y+1/4,z-1/4) + hermann_mauguin: I 4/m c m (a-1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + - y+1/2,x+1/2,z + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z + - y,x,-z + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - -x+1/2,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - y,x,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + - y+1/2,x+1/2,z + universal_h_m: I 4/m c m (a-1/4,b-1/4,c+1/4) +- crystal_class: tetragonal + hall: -I 4 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z-1/4) + hermann_mauguin: I 4/m c m (a+b,-a+b,c+1/4) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -x,-y,-z+1/2 + - y,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x,-z+1/2 + - y,x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - -y+1/2,-x,-z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z + - y+1/2,-x,-z + - x+1/2,y,-z + - -y+1/2,x,-z + - y+1/2,x,z + - -x+1/2,y,z + - -y+1/2,-x,z + - x+1/2,-y,z + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y+1/2,-z + - y,-x+1/2,-z + - x,y+1/2,-z + - -y,x+1/2,-z + - y,x+1/2,z + - -x,y+1/2,z + - -y,-x+1/2,z + - x,-y+1/2,z + universal_h_m: I 4/m c m (a+b,-a+b,c+1/4) +- crystal_class: tetragonal + hall: -P 4 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z-1/4) + hermann_mauguin: P 4/m c c (a+b,-a+b,c+1/4) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 124 + schoenflies: D4h^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -y,-x,-z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -x,-y,-z+1/2 + - y,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x,-z+1/2 + - y,x,z+1/2 + - -x,y,z+1/2 + - -y,-x,z+1/2 + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 4/m c c (a+b,-a+b,c+1/4) +- crystal_class: tetragonal + hall: -I 4 2c (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z) + hermann_mauguin: I 4/m c m (a+b+1/2,-a+b,c) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -y,-x,-z+1/2 + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x,-z + - x,y,-z + - -y,x+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y,z+1/2 + - -y,-x,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - y,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x,-z + - y,x,z+1/2 + - -x,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -y+1/2,-x,-z + - x+1/2,-y+1/2,-z + - y,x+1/2,-z + - -x,y,-z + - -x,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - y,x+1/2,z + - -x,y,z + - -y+1/2,-x,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -y,-x+1/2,-z + - x,-y,-z + - y+1/2,x,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - -y,x,-z+1/2 + - y+1/2,x,z + - -x+1/2,y+1/2,z + - -y,-x+1/2,z + - x,-y,z + universal_h_m: I 4/m c m (a+b+1/2,-a+b,c) +- crystal_class: tetragonal + hall: -P 4 2c (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 4/m c c (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 124 + schoenflies: D4h^2 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z + - x,y,-z + - -y+1/2,x,-z + - y,x,z+1/2 + - -x+1/2,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -y,x+1/2,z + - -x,-y,z + - y+1/2,-x,z + - -y,-x,-z+1/2 + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + universal_h_m: P 4/m c c (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 2 (x+1/4,y+1/4,z-1/4) + hermann_mauguin: I 4/m m m (a-1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - -x+1/2,y,z + - -y+1/2,-x+1/2,z + - x,-y+1/2,z + - y,x,z + - x+1/2,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y,-z + - y+1/2,x+1/2,-z + - -x,y+1/2,-z + - -y,-x,-z + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: I 4/m m m (a-1/4,b-1/4,c+1/4) +- crystal_class: tetragonal + hall: -I 4 2 (x+1/2,y,z+1/4) + hermann_mauguin: I 4/m m m (a+1/2,b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z + - -y+1/2,-x+1/2,z + - x,-y,z + - y+1/2,x+1/2,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x,y,z + - -y+1/2,-x+1/2,z + - x,-y,z + - y+1/2,x+1/2,z + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y,x,z+1/2 + universal_h_m: I 4/m m m (a+1/2,b,c-1/4) +- crystal_class: tetragonal + hall: -I 4 2c (x+1/2,y,z-1/4) + hermann_mauguin: I 4/m c m (a+1/2,b,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x,-y,-z + - y+1/2,x+1/2,-z + - -x,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x,-z + - x+1/2,y+1/2,-z + - -y,x,-z + - -x+1/2,y+1/2,z + - -y,-x,z + - x+1/2,-y+1/2,z + - y,x,z + universal_h_m: I 4/m c m (a+1/2,b,c+1/4) +- crystal_class: tetragonal + hall: -P 4c 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 42/m c m (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - y,x,z+1/2 + number: 132 + schoenflies: D4h^10 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -y,-x,-z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - y,x,z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: P 42/m c m (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 2 (x+1/2,y,z) + hermann_mauguin: I 4/m m m (a+1/2,b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -y,-x,-z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - y,x,z+1/2 + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x,-y,-z + - y+1/2,x+1/2,-z + - -x,y,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x+1/2,-z + - x,y,-z + - -y+1/2,x+1/2,-z + - -x,y,z + - -y+1/2,-x+1/2,z + - x,-y,z + - y+1/2,x+1/2,z + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y,x,z+1/2 + universal_h_m: I 4/m m m (a+1/2,b,c) +- crystal_class: tetragonal + hall: -P 4c 2 (1/2*x+1/2*y,-1/2*x+1/2*y,z) + hermann_mauguin: P 42/m m c (a+b,-a+b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - y,x,z + number: 131 + schoenflies: D4h^9 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -y,-x,-z + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - y,x,z + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z + - -y+1/2,x+1/2,-z+1/2 + - y+1/2,x+1/2,z + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 42/m m c (a+b,-a+b,c) +- crystal_class: tetragonal + hall: -I 4 2c (x+1/2,y,z) + hermann_mauguin: I 4/m c m (a+1/2,b,c) + ncsym: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -y,-x,-z + - -x,-y,-z + - y,-x,-z+1/2 + - x,y,-z + - -y,x,-z+1/2 + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - y,x,z + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y+1/2,x+1/2,z + - -x,-y,z + - y+1/2,-x+1/2,z + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x+1/2,-z + - x,y,-z + - -y+1/2,x+1/2,-z + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - y,-x,z+1/2 + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z+1/2 + - -x+1/2,y+1/2,z + - -y,-x,z + - x+1/2,-y+1/2,z + - y,x,z + universal_h_m: I 4/m c m (a+1/2,b,c) +- crystal_class: tetragonal + hall: -I 4 2c (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z-1/4) + hermann_mauguin: I 4/m c m (a+b+1/2,-a+b,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z + - y,x,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -y,-x,-z + - x,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y,z+1/2 + - -y,-x,z+1/2 + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z + - x+1/2,-y,-z + - y,x,-z + - -x,y+1/2,-z + - -x,-y,-z+1/2 + - y,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x,-z+1/2 + - y,x,z+1/2 + - -x,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -y+1/2,-x,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x,y,-z+1/2 + - -x,-y+1/2,-z + - y,-x,-z + - x+1/2,y,-z + - -y+1/2,x+1/2,-z + - y,x+1/2,z + - -x,y,z + - -y+1/2,-x,z + - x+1/2,-y+1/2,z + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x,-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y,-z + - y+1/2,-x+1/2,-z + - x,y+1/2,-z + - -y,x,-z + - y+1/2,x,z + - -x+1/2,y+1/2,z + - -y,-x+1/2,z + - x,-y,z + universal_h_m: I 4/m c m (a+b+1/2,-a+b,c+1/4) +- crystal_class: tetragonal + hall: -P 4c 2c (1/2*x+1/2*y,-1/2*x+1/2*y,z-1/4) + hermann_mauguin: P 42/m c m (a+b,-a+b,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z + - y,x,z+1/2 + number: 132 + schoenflies: D4h^10 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -y,-x,-z + - x,-y,-z+1/2 + - y,x,-z + - -x,y,-z+1/2 + - -x,-y,-z+1/2 + - y,-x,-z + - x,y,-z+1/2 + - -y,x,-z + - y,x,z+1/2 + - -x,y,z + - -y,-x,z+1/2 + - x,-y,z + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z + - x+1/2,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z + - -x+1/2,y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z + universal_h_m: P 42/m c m (a+b,-a+b,c+1/4) +- crystal_class: tetragonal + hall: -P 4c 2c (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 42/m c m (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y,z + - y+1/2,x+1/2,z+1/2 + number: 132 + schoenflies: D4h^10 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - x,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y,-z + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z+1/2 + - x,y,-z + - -y+1/2,x,-z+1/2 + - y,x,z+1/2 + - -x+1/2,y,z + - -y+1/2,-x+1/2,z+1/2 + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -y,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x,z+1/2 + - -y,-x,-z+1/2 + - x+1/2,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y,z + universal_h_m: P 42/m c m (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 2c (x-1/4,y+1/4,z-1/4) + hermann_mauguin: I 4/m c m (a+1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z + - y,x,-z+1/2 + - -x+1/2,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z + - -y,-x,z+1/2 + - x+1/2,-y,z + - y+1/2,x+1/2,z+1/2 + number: 140 + schoenflies: D4h^18 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - x,-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+1/2,y,-z + - -y,-x,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x+1/2,-z+1/2 + - -x+1/2,y,z+1/2 + - -y,-x,z+1/2 + - x,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x,z+1/2 + - -x,-y,z+1/2 + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - -x,-y,-z + - y,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x,-z + - -x,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y,z + - y,x,z + universal_h_m: I 4/m c m (a+1/4,b-1/4,c+1/4) +- crystal_class: tetragonal + hall: -I 4 2 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y+1/4,z+1/4) + hermann_mauguin: I 4/m m m (a+b+1/2,-a+b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - -y,-x,-z+1/2 + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x+1/2,-z+1/2 + - y+1/2,x+1/2,z + - -x+1/2,y,z + - -y,-x,z + - x,-y+1/2,z + - x+1/2,y+1/2,z + - -y+1/2,x,z + - -x,-y,z + - y,-x+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y,-z+1/2 + - y,x,-z+1/2 + - -x,y+1/2,-z+1/2 + - -x,-y,-z+1/2 + - y,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x,-z+1/2 + - y,x,z + - -x,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y,z + - x+1/2,y,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x,z+1/2 + - -y+1/2,-x,-z + - x+1/2,-y+1/2,-z + - y,x+1/2,-z + - -x,y,-z + - -x,-y+1/2,-z + - y,-x,-z + - x+1/2,y,-z + - -y+1/2,x+1/2,-z + - y,x+1/2,z+1/2 + - -x,y,z+1/2 + - -y+1/2,-x,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x,y+1/2,z+1/2 + - -y,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - -y,-x+1/2,-z + - x,-y,-z + - y+1/2,x,-z + - -x+1/2,y+1/2,-z + - -x+1/2,-y,-z + - y+1/2,-x+1/2,-z + - x,y+1/2,-z + - -y,x,-z + - y+1/2,x,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x,-y,z+1/2 + universal_h_m: I 4/m m m (a+b+1/2,-a+b,c-1/4) +- crystal_class: tetragonal + hall: -P 4c 2 (1/2*x+1/2*y,-1/2*x+1/2*y,z+1/4) + hermann_mauguin: P 42/m m c (a+b,-a+b,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + number: 131 + schoenflies: D4h^9 + symops: + - x,y,z + - -y,x,z+1/2 + - -x,-y,z + - y,-x,z+1/2 + - -y,-x,-z+1/2 + - x,-y,-z + - y,x,-z+1/2 + - -x,y,-z + - -x,-y,-z+1/2 + - y,-x,-z + - x,y,-z+1/2 + - -y,x,-z + - y,x,z + - -x,y,z+1/2 + - -y,-x,z + - x,-y,z+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - x+1/2,-y+1/2,-z + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,-z + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z + - y+1/2,x+1/2,z + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z+1/2 + universal_h_m: P 42/m m c (a+b,-a+b,c-1/4) +- crystal_class: tetragonal + hall: -P 4c 2 (1/2*x+1/2*y-1/4,-1/2*x+1/2*y-1/4,z) + hermann_mauguin: P 42/m m c (a+b,-a+b+1/2,c) + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z + number: 131 + schoenflies: D4h^9 + symops: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - -y+1/2,-x+1/2,-z + - x,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y,-z+1/2 + - -x+1/2,-y+1/2,-z + - y,-x+1/2,-z+1/2 + - x,y,-z + - -y+1/2,x,-z+1/2 + - y,x,z + - -x+1/2,y,z+1/2 + - -y+1/2,-x+1/2,z + - x,-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - -y,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x,z+1/2 + - -y,-x,-z + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - y+1/2,x+1/2,z + - -x,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y,z+1/2 + universal_h_m: P 42/m m c (a+b,-a+b+1/2,c) +- crystal_class: tetragonal + hall: -I 4 2 (x-1/4,y+1/4,z-1/4) + hermann_mauguin: I 4/m m m (a+1/4,b-1/4,c+1/4) + ncsym: + - x,y,z + - -y+1/2,x,z+1/2 + - -x+1/2,-y+1/2,z + - y,-x+1/2,z+1/2 + - x,-y+1/2,-z+1/2 + - y,x,-z + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z + number: 139 + schoenflies: D4h^17 + symops: + - x,y,z + - -y,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x,z + - x,-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y,-x,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x+1/2,-z+1/2 + - -x+1/2,y,z + - -y,-x,z + - x,-y+1/2,z + - y+1/2,x+1/2,z + - x+1/2,y+1/2,z+1/2 + - -y+1/2,x,z+1/2 + - -x,-y,z+1/2 + - y,-x+1/2,z+1/2 + - x+1/2,-y,-z + - y,x,-z + - -x,y+1/2,-z + - -y+1/2,-x+1/2,-z + - -x,-y,-z + - y,-x+1/2,-z + - x+1/2,y+1/2,-z + - -y+1/2,x,-z + - -x,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - y,x,z+1/2 + universal_h_m: I 4/m m m (a+1/4,b-1/4,c+1/4) +- crystal_class: hexagonal + hall: -P 6 (1/2*x,1/2*y,1/2*z) + hermann_mauguin: P 6/m (2*a,2*b,2*c) + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + number: 175 + schoenflies: C6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - x+1/2,y,z + - x-y+1/2,x,z + - -y+1/2,x-y,z + - -x+1/2,-y,z + - -x+y+1/2,-x,z + - y+1/2,-x+y,z + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z + - y+1/2,-x+y,-z + - x+1/2,y,-z + - x-y+1/2,x,-z + - -y+1/2,x-y,-z + - x,y+1/2,z + - x-y,x+1/2,z + - -y,x-y+1/2,z + - -x,-y+1/2,z + - -x+y,-x+1/2,z + - y,-x+y+1/2,z + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z + - y,-x+y+1/2,-z + - x,y+1/2,-z + - x-y,x+1/2,-z + - -y,x-y+1/2,-z + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z + - x,y,z+1/2 + - x-y,x,z+1/2 + - -y,x-y,z+1/2 + - -x,-y,z+1/2 + - -x+y,-x,z+1/2 + - y,-x+y,z+1/2 + - -x,-y,-z+1/2 + - -x+y,-x,-z+1/2 + - y,-x+y,-z+1/2 + - x,y,-z+1/2 + - x-y,x,-z+1/2 + - -y,x-y,-z+1/2 + - x+1/2,y,z+1/2 + - x-y+1/2,x,z+1/2 + - -y+1/2,x-y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+y+1/2,-x,z+1/2 + - y+1/2,-x+y,z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+y+1/2,-x,-z+1/2 + - y+1/2,-x+y,-z+1/2 + - x+1/2,y,-z+1/2 + - x-y+1/2,x,-z+1/2 + - -y+1/2,x-y,-z+1/2 + - x,y+1/2,z+1/2 + - x-y,x+1/2,z+1/2 + - -y,x-y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x+y,-x+1/2,z+1/2 + - y,-x+y+1/2,z+1/2 + - -x,-y+1/2,-z+1/2 + - -x+y,-x+1/2,-z+1/2 + - y,-x+y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - x-y,x+1/2,-z+1/2 + - -y,x-y+1/2,-z+1/2 + - x+1/2,y+1/2,z+1/2 + - x-y+1/2,x+1/2,z+1/2 + - -y+1/2,x-y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+y+1/2,-x+1/2,z+1/2 + - y+1/2,-x+y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+y+1/2,-x+1/2,-z+1/2 + - y+1/2,-x+y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x-y+1/2,x+1/2,-z+1/2 + - -y+1/2,x-y+1/2,-z+1/2 + universal_h_m: P 6/m (2*a,2*b,2*c) +- crystal_class: hexagonal + hall: -P 6 (1/2*x,1/2*y,z) + hermann_mauguin: P 6/m (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + number: 175 + schoenflies: C6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - x+1/2,y,z + - x-y+1/2,x,z + - -y+1/2,x-y,z + - -x+1/2,-y,z + - -x+y+1/2,-x,z + - y+1/2,-x+y,z + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z + - y+1/2,-x+y,-z + - x+1/2,y,-z + - x-y+1/2,x,-z + - -y+1/2,x-y,-z + - x,y+1/2,z + - x-y,x+1/2,z + - -y,x-y+1/2,z + - -x,-y+1/2,z + - -x+y,-x+1/2,z + - y,-x+y+1/2,z + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z + - y,-x+y+1/2,-z + - x,y+1/2,-z + - x-y,x+1/2,-z + - -y,x-y+1/2,-z + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z + universal_h_m: P 6/m (2*a,2*b,c) +- crystal_class: hexagonal + hall: -P 6c (1/2*x,1/2*y,z) + hermann_mauguin: P 63/m (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + number: 176 + schoenflies: C6h^2 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + - x+1/2,y,z + - x-y+1/2,x,z+1/2 + - -y+1/2,x-y,z + - -x+1/2,-y,z+1/2 + - -x+y+1/2,-x,z + - y+1/2,-x+y,z+1/2 + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z+1/2 + - y+1/2,-x+y,-z + - x+1/2,y,-z+1/2 + - x-y+1/2,x,-z + - -y+1/2,x-y,-z+1/2 + - x,y+1/2,z + - x-y,x+1/2,z+1/2 + - -y,x-y+1/2,z + - -x,-y+1/2,z+1/2 + - -x+y,-x+1/2,z + - y,-x+y+1/2,z+1/2 + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z+1/2 + - y,-x+y+1/2,-z + - x,y+1/2,-z+1/2 + - x-y,x+1/2,-z + - -y,x-y+1/2,-z+1/2 + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z+1/2 + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z+1/2 + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z+1/2 + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z+1/2 + universal_h_m: P 63/m (2*a,2*b,c) +- crystal_class: hexagonal + hall: -P 6 2 (1/2*x,1/2*y,1/2*z) + hermann_mauguin: P 6/m m m (2*a,2*b,2*c) + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + number: 191 + schoenflies: D6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + - x+1/2,y,z + - x-y+1/2,x,z + - -y+1/2,x-y,z + - -x+1/2,-y,z + - -x+y+1/2,-x,z + - y+1/2,-x+y,z + - -y+1/2,-x,-z + - x-y+1/2,-y,-z + - x+1/2,x-y,-z + - y+1/2,x,-z + - -x+y+1/2,y,-z + - -x+1/2,-x+y,-z + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z + - y+1/2,-x+y,-z + - x+1/2,y,-z + - x-y+1/2,x,-z + - -y+1/2,x-y,-z + - y+1/2,x,z + - -x+y+1/2,y,z + - -x+1/2,-x+y,z + - -y+1/2,-x,z + - x-y+1/2,-y,z + - x+1/2,x-y,z + - x,y+1/2,z + - x-y,x+1/2,z + - -y,x-y+1/2,z + - -x,-y+1/2,z + - -x+y,-x+1/2,z + - y,-x+y+1/2,z + - -y,-x+1/2,-z + - x-y,-y+1/2,-z + - x,x-y+1/2,-z + - y,x+1/2,-z + - -x+y,y+1/2,-z + - -x,-x+y+1/2,-z + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z + - y,-x+y+1/2,-z + - x,y+1/2,-z + - x-y,x+1/2,-z + - -y,x-y+1/2,-z + - y,x+1/2,z + - -x+y,y+1/2,z + - -x,-x+y+1/2,z + - -y,-x+1/2,z + - x-y,-y+1/2,z + - x,x-y+1/2,z + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,-z + - x-y+1/2,-y+1/2,-z + - x+1/2,x-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+y+1/2,y+1/2,-z + - -x+1/2,-x+y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z + - y+1/2,x+1/2,z + - -x+y+1/2,y+1/2,z + - -x+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,z + - x-y+1/2,-y+1/2,z + - x+1/2,x-y+1/2,z + - x,y,z+1/2 + - x-y,x,z+1/2 + - -y,x-y,z+1/2 + - -x,-y,z+1/2 + - -x+y,-x,z+1/2 + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z+1/2 + - x,x-y,-z+1/2 + - y,x,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/2 + - -x,-y,-z+1/2 + - -x+y,-x,-z+1/2 + - y,-x+y,-z+1/2 + - x,y,-z+1/2 + - x-y,x,-z+1/2 + - -y,x-y,-z+1/2 + - y,x,z+1/2 + - -x+y,y,z+1/2 + - -x,-x+y,z+1/2 + - -y,-x,z+1/2 + - x-y,-y,z+1/2 + - x,x-y,z+1/2 + - x+1/2,y,z+1/2 + - x-y+1/2,x,z+1/2 + - -y+1/2,x-y,z+1/2 + - -x+1/2,-y,z+1/2 + - -x+y+1/2,-x,z+1/2 + - y+1/2,-x+y,z+1/2 + - -y+1/2,-x,-z+1/2 + - x-y+1/2,-y,-z+1/2 + - x+1/2,x-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+y+1/2,y,-z+1/2 + - -x+1/2,-x+y,-z+1/2 + - -x+1/2,-y,-z+1/2 + - -x+y+1/2,-x,-z+1/2 + - y+1/2,-x+y,-z+1/2 + - x+1/2,y,-z+1/2 + - x-y+1/2,x,-z+1/2 + - -y+1/2,x-y,-z+1/2 + - y+1/2,x,z+1/2 + - -x+y+1/2,y,z+1/2 + - -x+1/2,-x+y,z+1/2 + - -y+1/2,-x,z+1/2 + - x-y+1/2,-y,z+1/2 + - x+1/2,x-y,z+1/2 + - x,y+1/2,z+1/2 + - x-y,x+1/2,z+1/2 + - -y,x-y+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - -x+y,-x+1/2,z+1/2 + - y,-x+y+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x-y,-y+1/2,-z+1/2 + - x,x-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x+y,y+1/2,-z+1/2 + - -x,-x+y+1/2,-z+1/2 + - -x,-y+1/2,-z+1/2 + - -x+y,-x+1/2,-z+1/2 + - y,-x+y+1/2,-z+1/2 + - x,y+1/2,-z+1/2 + - x-y,x+1/2,-z+1/2 + - -y,x-y+1/2,-z+1/2 + - y,x+1/2,z+1/2 + - -x+y,y+1/2,z+1/2 + - -x,-x+y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x-y,-y+1/2,z+1/2 + - x,x-y+1/2,z+1/2 + - x+1/2,y+1/2,z+1/2 + - x-y+1/2,x+1/2,z+1/2 + - -y+1/2,x-y+1/2,z+1/2 + - -x+1/2,-y+1/2,z+1/2 + - -x+y+1/2,-x+1/2,z+1/2 + - y+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - x-y+1/2,-y+1/2,-z+1/2 + - x+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+y+1/2,y+1/2,-z+1/2 + - -x+1/2,-x+y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - -x+y+1/2,-x+1/2,-z+1/2 + - y+1/2,-x+y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x-y+1/2,x+1/2,-z+1/2 + - -y+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+y+1/2,y+1/2,z+1/2 + - -x+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x-y+1/2,-y+1/2,z+1/2 + - x+1/2,x-y+1/2,z+1/2 + universal_h_m: P 6/m m m (2*a,2*b,2*c) +- crystal_class: hexagonal + hall: -P 6 2 (1/2*x,1/2*y,z) + hermann_mauguin: P 6/m m m (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + number: 191 + schoenflies: D6h^1 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z + - x-y,-y,-z + - x,x-y,-z + - y,x,-z + - -x+y,y,-z + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z + - -x+y,y,z + - -x,-x+y,z + - -y,-x,z + - x-y,-y,z + - x,x-y,z + - x+1/2,y,z + - x-y+1/2,x,z + - -y+1/2,x-y,z + - -x+1/2,-y,z + - -x+y+1/2,-x,z + - y+1/2,-x+y,z + - -y+1/2,-x,-z + - x-y+1/2,-y,-z + - x+1/2,x-y,-z + - y+1/2,x,-z + - -x+y+1/2,y,-z + - -x+1/2,-x+y,-z + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z + - y+1/2,-x+y,-z + - x+1/2,y,-z + - x-y+1/2,x,-z + - -y+1/2,x-y,-z + - y+1/2,x,z + - -x+y+1/2,y,z + - -x+1/2,-x+y,z + - -y+1/2,-x,z + - x-y+1/2,-y,z + - x+1/2,x-y,z + - x,y+1/2,z + - x-y,x+1/2,z + - -y,x-y+1/2,z + - -x,-y+1/2,z + - -x+y,-x+1/2,z + - y,-x+y+1/2,z + - -y,-x+1/2,-z + - x-y,-y+1/2,-z + - x,x-y+1/2,-z + - y,x+1/2,-z + - -x+y,y+1/2,-z + - -x,-x+y+1/2,-z + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z + - y,-x+y+1/2,-z + - x,y+1/2,-z + - x-y,x+1/2,-z + - -y,x-y+1/2,-z + - y,x+1/2,z + - -x+y,y+1/2,z + - -x,-x+y+1/2,z + - -y,-x+1/2,z + - x-y,-y+1/2,z + - x,x-y+1/2,z + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,-z + - x-y+1/2,-y+1/2,-z + - x+1/2,x-y+1/2,-z + - y+1/2,x+1/2,-z + - -x+y+1/2,y+1/2,-z + - -x+1/2,-x+y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z + - y+1/2,x+1/2,z + - -x+y+1/2,y+1/2,z + - -x+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,z + - x-y+1/2,-y+1/2,z + - x+1/2,x-y+1/2,z + universal_h_m: P 6/m m m (2*a,2*b,c) +- crystal_class: hexagonal + hall: -P 6 2c (1/2*x,1/2*y,z) + hermann_mauguin: P 6/m c c (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z+1/2 + - x-y,-y,-z+1/2 + - x,x-y,-z+1/2 + - y,x,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z+1/2 + - -x+y,y,z+1/2 + - -x,-x+y,z+1/2 + - -y,-x,z+1/2 + - x-y,-y,z+1/2 + - x,x-y,z+1/2 + number: 192 + schoenflies: D6h^2 + symops: + - x,y,z + - x-y,x,z + - -y,x-y,z + - -x,-y,z + - -x+y,-x,z + - y,-x+y,z + - -y,-x,-z+1/2 + - x-y,-y,-z+1/2 + - x,x-y,-z+1/2 + - y,x,-z+1/2 + - -x+y,y,-z+1/2 + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z + - y,-x+y,-z + - x,y,-z + - x-y,x,-z + - -y,x-y,-z + - y,x,z+1/2 + - -x+y,y,z+1/2 + - -x,-x+y,z+1/2 + - -y,-x,z+1/2 + - x-y,-y,z+1/2 + - x,x-y,z+1/2 + - x+1/2,y,z + - x-y+1/2,x,z + - -y+1/2,x-y,z + - -x+1/2,-y,z + - -x+y+1/2,-x,z + - y+1/2,-x+y,z + - -y+1/2,-x,-z+1/2 + - x-y+1/2,-y,-z+1/2 + - x+1/2,x-y,-z+1/2 + - y+1/2,x,-z+1/2 + - -x+y+1/2,y,-z+1/2 + - -x+1/2,-x+y,-z+1/2 + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z + - y+1/2,-x+y,-z + - x+1/2,y,-z + - x-y+1/2,x,-z + - -y+1/2,x-y,-z + - y+1/2,x,z+1/2 + - -x+y+1/2,y,z+1/2 + - -x+1/2,-x+y,z+1/2 + - -y+1/2,-x,z+1/2 + - x-y+1/2,-y,z+1/2 + - x+1/2,x-y,z+1/2 + - x,y+1/2,z + - x-y,x+1/2,z + - -y,x-y+1/2,z + - -x,-y+1/2,z + - -x+y,-x+1/2,z + - y,-x+y+1/2,z + - -y,-x+1/2,-z+1/2 + - x-y,-y+1/2,-z+1/2 + - x,x-y+1/2,-z+1/2 + - y,x+1/2,-z+1/2 + - -x+y,y+1/2,-z+1/2 + - -x,-x+y+1/2,-z+1/2 + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z + - y,-x+y+1/2,-z + - x,y+1/2,-z + - x-y,x+1/2,-z + - -y,x-y+1/2,-z + - y,x+1/2,z+1/2 + - -x+y,y+1/2,z+1/2 + - -x,-x+y+1/2,z+1/2 + - -y,-x+1/2,z+1/2 + - x-y,-y+1/2,z+1/2 + - x,x-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,-z+1/2 + - x-y+1/2,-y+1/2,-z+1/2 + - x+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x+y+1/2,y+1/2,-z+1/2 + - -x+1/2,-x+y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z + - y+1/2,x+1/2,z+1/2 + - -x+y+1/2,y+1/2,z+1/2 + - -x+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x-y+1/2,-y+1/2,z+1/2 + - x+1/2,x-y+1/2,z+1/2 + universal_h_m: P 6/m c c (2*a,2*b,c) +- crystal_class: hexagonal + hall: -P 6c 2 (1/2*x,1/2*y,z) + hermann_mauguin: P 63/m c m (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z + - x-y,-y,-z+1/2 + - x,x-y,-z + - y,x,-z+1/2 + - -x+y,y,-z + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + - y,x,z + - -x+y,y,z+1/2 + - -x,-x+y,z + - -y,-x,z+1/2 + - x-y,-y,z + - x,x-y,z+1/2 + number: 193 + schoenflies: D6h^3 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z + - x-y,-y,-z+1/2 + - x,x-y,-z + - y,x,-z+1/2 + - -x+y,y,-z + - -x,-x+y,-z+1/2 + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + - y,x,z + - -x+y,y,z+1/2 + - -x,-x+y,z + - -y,-x,z+1/2 + - x-y,-y,z + - x,x-y,z+1/2 + - x+1/2,y,z + - x-y+1/2,x,z+1/2 + - -y+1/2,x-y,z + - -x+1/2,-y,z+1/2 + - -x+y+1/2,-x,z + - y+1/2,-x+y,z+1/2 + - -y+1/2,-x,-z + - x-y+1/2,-y,-z+1/2 + - x+1/2,x-y,-z + - y+1/2,x,-z+1/2 + - -x+y+1/2,y,-z + - -x+1/2,-x+y,-z+1/2 + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z+1/2 + - y+1/2,-x+y,-z + - x+1/2,y,-z+1/2 + - x-y+1/2,x,-z + - -y+1/2,x-y,-z+1/2 + - y+1/2,x,z + - -x+y+1/2,y,z+1/2 + - -x+1/2,-x+y,z + - -y+1/2,-x,z+1/2 + - x-y+1/2,-y,z + - x+1/2,x-y,z+1/2 + - x,y+1/2,z + - x-y,x+1/2,z+1/2 + - -y,x-y+1/2,z + - -x,-y+1/2,z+1/2 + - -x+y,-x+1/2,z + - y,-x+y+1/2,z+1/2 + - -y,-x+1/2,-z + - x-y,-y+1/2,-z+1/2 + - x,x-y+1/2,-z + - y,x+1/2,-z+1/2 + - -x+y,y+1/2,-z + - -x,-x+y+1/2,-z+1/2 + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z+1/2 + - y,-x+y+1/2,-z + - x,y+1/2,-z+1/2 + - x-y,x+1/2,-z + - -y,x-y+1/2,-z+1/2 + - y,x+1/2,z + - -x+y,y+1/2,z+1/2 + - -x,-x+y+1/2,z + - -y,-x+1/2,z+1/2 + - x-y,-y+1/2,z + - x,x-y+1/2,z+1/2 + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z+1/2 + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z + - x-y+1/2,-y+1/2,-z+1/2 + - x+1/2,x-y+1/2,-z + - y+1/2,x+1/2,-z+1/2 + - -x+y+1/2,y+1/2,-z + - -x+1/2,-x+y+1/2,-z+1/2 + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z+1/2 + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,z + - -x+y+1/2,y+1/2,z+1/2 + - -x+1/2,-x+y+1/2,z + - -y+1/2,-x+1/2,z+1/2 + - x-y+1/2,-y+1/2,z + - x+1/2,x-y+1/2,z+1/2 + universal_h_m: P 63/m c m (2*a,2*b,c) +- crystal_class: hexagonal + hall: -P 6c 2c (1/2*x,1/2*y,z) + hermann_mauguin: P 63/m m c (2*a,2*b,c) + ncsym: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + - y,x,z+1/2 + - -x+y,y,z + - -x,-x+y,z+1/2 + - -y,-x,z + - x-y,-y,z+1/2 + - x,x-y,z + number: 194 + schoenflies: D6h^4 + symops: + - x,y,z + - x-y,x,z+1/2 + - -y,x-y,z + - -x,-y,z+1/2 + - -x+y,-x,z + - y,-x+y,z+1/2 + - -y,-x,-z+1/2 + - x-y,-y,-z + - x,x-y,-z+1/2 + - y,x,-z + - -x+y,y,-z+1/2 + - -x,-x+y,-z + - -x,-y,-z + - -x+y,-x,-z+1/2 + - y,-x+y,-z + - x,y,-z+1/2 + - x-y,x,-z + - -y,x-y,-z+1/2 + - y,x,z+1/2 + - -x+y,y,z + - -x,-x+y,z+1/2 + - -y,-x,z + - x-y,-y,z+1/2 + - x,x-y,z + - x+1/2,y,z + - x-y+1/2,x,z+1/2 + - -y+1/2,x-y,z + - -x+1/2,-y,z+1/2 + - -x+y+1/2,-x,z + - y+1/2,-x+y,z+1/2 + - -y+1/2,-x,-z+1/2 + - x-y+1/2,-y,-z + - x+1/2,x-y,-z+1/2 + - y+1/2,x,-z + - -x+y+1/2,y,-z+1/2 + - -x+1/2,-x+y,-z + - -x+1/2,-y,-z + - -x+y+1/2,-x,-z+1/2 + - y+1/2,-x+y,-z + - x+1/2,y,-z+1/2 + - x-y+1/2,x,-z + - -y+1/2,x-y,-z+1/2 + - y+1/2,x,z+1/2 + - -x+y+1/2,y,z + - -x+1/2,-x+y,z+1/2 + - -y+1/2,-x,z + - x-y+1/2,-y,z+1/2 + - x+1/2,x-y,z + - x,y+1/2,z + - x-y,x+1/2,z+1/2 + - -y,x-y+1/2,z + - -x,-y+1/2,z+1/2 + - -x+y,-x+1/2,z + - y,-x+y+1/2,z+1/2 + - -y,-x+1/2,-z+1/2 + - x-y,-y+1/2,-z + - x,x-y+1/2,-z+1/2 + - y,x+1/2,-z + - -x+y,y+1/2,-z+1/2 + - -x,-x+y+1/2,-z + - -x,-y+1/2,-z + - -x+y,-x+1/2,-z+1/2 + - y,-x+y+1/2,-z + - x,y+1/2,-z+1/2 + - x-y,x+1/2,-z + - -y,x-y+1/2,-z+1/2 + - y,x+1/2,z+1/2 + - -x+y,y+1/2,z + - -x,-x+y+1/2,z+1/2 + - -y,-x+1/2,z + - x-y,-y+1/2,z+1/2 + - x,x-y+1/2,z + - x+1/2,y+1/2,z + - x-y+1/2,x+1/2,z+1/2 + - -y+1/2,x-y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+y+1/2,-x+1/2,z + - y+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - x-y+1/2,-y+1/2,-z + - x+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,-z + - -x+y+1/2,y+1/2,-z+1/2 + - -x+1/2,-x+y+1/2,-z + - -x+1/2,-y+1/2,-z + - -x+y+1/2,-x+1/2,-z+1/2 + - y+1/2,-x+y+1/2,-z + - x+1/2,y+1/2,-z+1/2 + - x-y+1/2,x+1/2,-z + - -y+1/2,x-y+1/2,-z+1/2 + - y+1/2,x+1/2,z+1/2 + - -x+y+1/2,y+1/2,z + - -x+1/2,-x+y+1/2,z+1/2 + - -y+1/2,-x+1/2,z + - x-y+1/2,-y+1/2,z+1/2 + - x+1/2,x-y+1/2,z + universal_h_m: P 63/m m c (2*a,2*b,c) +- crystal_class: cubic + hall: -F 2 2 3 (x+1/4,y+1/4,z+1/4) + hermann_mauguin: F m -3 (a-1/4,b-1/4,c-1/4) + ncsym: + - x,y,z + - -x,-y,z + - x,-y,-z + - -x,y,-z + - z,x,y + - -z,-x,y + - z,-x,-y + - -z,x,-y + - y,z,x + - y,-z,-x + - -y,z,-x + - -y,-z,x + - -x+1/2,-y+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + number: 202 + schoenflies: Th^3 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - z,x,y + - -z+1/2,-x+1/2,y + - z,-x+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z+1/2,x + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z + - -z+1/2,-x+1/2,-y+1/2 + - z,x,-y+1/2 + - -z+1/2,x,y + - z,-x+1/2,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z,x + - y,-z+1/2,x + - y,z,-x+1/2 + - x,y+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - x,-y,-z + - -x+1/2,y+1/2,-z + - z,x+1/2,y+1/2 + - -z+1/2,-x,y+1/2 + - z,-x,-y + - -z+1/2,x+1/2,-y + - y,z+1/2,x+1/2 + - y,-z,-x + - -y+1/2,z+1/2,-x + - -y+1/2,-z,x+1/2 + - -x+1/2,-y,-z + - x,y+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - x,-y,z+1/2 + - -z+1/2,-x,-y + - z,x+1/2,-y + - -z+1/2,x+1/2,y+1/2 + - z,-x,y+1/2 + - -y+1/2,-z,-x + - -y+1/2,z+1/2,x+1/2 + - y,-z,x+1/2 + - y,z+1/2,-x + - x+1/2,y,z+1/2 + - -x,-y+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - -x,y,-z + - z+1/2,x,y+1/2 + - -z,-x+1/2,y+1/2 + - z+1/2,-x+1/2,-y + - -z,x,-y + - y+1/2,z,x+1/2 + - y+1/2,-z+1/2,-x + - -y,z,-x + - -y,-z+1/2,x+1/2 + - -x,-y+1/2,-z + - x+1/2,y,-z + - -x,y,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - -z,-x+1/2,-y + - z+1/2,x,-y + - -z,x,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - -y,-z+1/2,-x + - -y,z,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - y+1/2,z,-x + - x+1/2,y+1/2,z + - -x,-y,z + - x+1/2,-y,-z+1/2 + - -x,y+1/2,-z+1/2 + - z+1/2,x+1/2,y + - -z,-x,y + - z+1/2,-x,-y+1/2 + - -z,x+1/2,-y+1/2 + - y+1/2,z+1/2,x + - y+1/2,-z,-x+1/2 + - -y,z+1/2,-x+1/2 + - -y,-z,x + - -x,-y,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -x,y+1/2,z + - x+1/2,-y,z + - -z,-x,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -z,x+1/2,y + - z+1/2,-x,y + - -y,-z,-x+1/2 + - -y,z+1/2,x + - y+1/2,-z,x + - y+1/2,z+1/2,-x+1/2 + universal_h_m: F m -3 (a-1/4,b-1/4,c-1/4) +- crystal_class: cubic + hall: -I 2 2 3 (x+1/4,y+1/4,z+1/4) + hermann_mauguin: I m -3 (a-1/4,b-1/4,c-1/4) + ncsym: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - z,x,y + - -z+1/2,-x+1/2,y + - z,-x+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z+1/2,x + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - -z,-x,-y + - z+1/2,x+1/2,-y + - -z,x+1/2,y+1/2 + - z+1/2,-x,y+1/2 + - -y,-z,-x + - -y,z+1/2,x+1/2 + - y+1/2,-z,x+1/2 + - y+1/2,z+1/2,-x + number: 204 + schoenflies: Th^5 + symops: + - x,y,z + - -x+1/2,-y+1/2,z + - x,-y+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - z,x,y + - -z+1/2,-x+1/2,y + - z,-x+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - -y+1/2,z,-x+1/2 + - -y+1/2,-z+1/2,x + - -x+1/2,-y+1/2,-z+1/2 + - x,y,-z+1/2 + - -x+1/2,y,z + - x,-y+1/2,z + - -z+1/2,-x+1/2,-y+1/2 + - z,x,-y+1/2 + - -z+1/2,x,y + - z,-x+1/2,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z,x + - y,-z+1/2,x + - y,z,-x+1/2 + - x+1/2,y+1/2,z+1/2 + - -x,-y,z+1/2 + - x+1/2,-y,-z + - -x,y+1/2,-z + - z+1/2,x+1/2,y+1/2 + - -z,-x,y+1/2 + - z+1/2,-x,-y + - -z,x+1/2,-y + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z,-x + - -y,z+1/2,-x + - -y,-z,x+1/2 + - -x,-y,-z + - x+1/2,y+1/2,-z + - -x,y+1/2,z+1/2 + - x+1/2,-y,z+1/2 + - -z,-x,-y + - z+1/2,x+1/2,-y + - -z,x+1/2,y+1/2 + - z+1/2,-x,y+1/2 + - -y,-z,-x + - -y,z+1/2,x+1/2 + - y+1/2,-z,x+1/2 + - y+1/2,z+1/2,-x + universal_h_m: I m -3 (a-1/4,b-1/4,c-1/4) +- crystal_class: cubic + hall: -F 4a 2 3 (x-1/4,y-1/4,z-1/4) + hermann_mauguin: F m -3 c (a+1/4,b+1/4,c+1/4) + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y,-z + - y,x,-z + - -x,y,-z + - -y,-x,-z + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x,-y + - x,z,-y + - -z,x,-y + - -x,-z,-y + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y,-x + - -y,-z,x + - z,-y,x + - -z,y,x + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z+1/2,-x+1/2,-y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - -z+1/2,x+1/2,y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x+1/2 + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + number: 226 + schoenflies: Oh^6 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - x,-y+1/2,-z+1/2 + - y+1/2,x,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y+1/2,-x,-z+1/2 + - z,x,y + - -x,z,y + - -z,-x,y + - x,-z,y + - z,-x+1/2,-y+1/2 + - x+1/2,z,-y+1/2 + - -z,x+1/2,-y+1/2 + - -x+1/2,-z,-y+1/2 + - y,z,x + - y,-z,-x + - z,y,-x + - -y,z,-x + - -z,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x+1/2 + - -z,y+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y+1/2,-x+1/2,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y+1/2,x+1/2,-z+1/2 + - -x+1/2,y,z + - -y,-x+1/2,z + - x+1/2,-y,z + - y,x+1/2,z + - -z+1/2,-x+1/2,-y+1/2 + - x+1/2,-z+1/2,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x+1/2,z+1/2,-y+1/2 + - -z+1/2,x,y + - -x,-z+1/2,y + - z+1/2,-x,y + - x,z+1/2,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y,x + - y,z,-x+1/2 + - -z+1/2,y,-x + - z+1/2,-y,-x + - x,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y+1/2,z+1/2 + - y,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z + - -x,y,-z + - -y+1/2,-x+1/2,-z + - z,x+1/2,y+1/2 + - -x,z+1/2,y+1/2 + - -z,-x+1/2,y+1/2 + - x,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y + - -z,x,-y + - -x+1/2,-z+1/2,-y + - y,z+1/2,x+1/2 + - y,-z+1/2,-x+1/2 + - z,y+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -z,-y,-x + - -y+1/2,-z,x+1/2 + - z,-y,x + - -z,y,x + - -x+1/2,-y,-z + - y+1/2,-x,-z + - x+1/2,y,-z + - -y+1/2,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y,x,z+1/2 + - -z+1/2,-x,-y + - x+1/2,-z,-y + - z+1/2,x,-y + - -x+1/2,z,-y + - -z+1/2,x+1/2,y+1/2 + - -x,-z,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x,z,y+1/2 + - -y+1/2,-z,-x + - -y+1/2,z,x + - -z+1/2,-y,x + - y+1/2,-z,x + - z+1/2,y+1/2,x+1/2 + - y,z+1/2,-x + - -z+1/2,y+1/2,-x+1/2 + - z+1/2,-y+1/2,-x+1/2 + - x+1/2,y,z+1/2 + - -y+1/2,x,z+1/2 + - -x+1/2,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y+1/2,-z + - y,x,-z + - -x+1/2,y+1/2,-z + - -y,-x,-z + - z+1/2,x,y+1/2 + - -x+1/2,z,y+1/2 + - -z+1/2,-x,y+1/2 + - x+1/2,-z,y+1/2 + - z+1/2,-x+1/2,-y + - x,z,-y + - -z+1/2,x+1/2,-y + - -x,-z,-y + - y+1/2,z,x+1/2 + - y+1/2,-z,-x+1/2 + - z+1/2,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x + - -y,-z+1/2,x+1/2 + - z+1/2,-y+1/2,x + - -z+1/2,y+1/2,x + - -x,-y+1/2,-z + - y,-x+1/2,-z + - x,y+1/2,-z + - -y,x+1/2,-z + - -x,y,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z,-x+1/2,-y + - x,-z+1/2,-y + - z,x+1/2,-y + - -x,z+1/2,-y + - -z,x,y+1/2 + - -x+1/2,-z+1/2,y+1/2 + - z,-x,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y,-z+1/2,-x + - -y,z+1/2,x + - -z,-y+1/2,x + - y,-z+1/2,x + - z,y,x+1/2 + - y+1/2,z,-x + - -z,y,-x+1/2 + - z,-y,-x+1/2 + - x+1/2,y+1/2,z + - -y+1/2,x+1/2,z + - -x+1/2,-y+1/2,z + - y+1/2,-x+1/2,z + - x+1/2,-y,-z+1/2 + - y,x+1/2,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y,-x+1/2,-z+1/2 + - z+1/2,x+1/2,y + - -x+1/2,z+1/2,y + - -z+1/2,-x+1/2,y + - x+1/2,-z+1/2,y + - z+1/2,-x,-y+1/2 + - x,z+1/2,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x,-z+1/2,-y+1/2 + - y+1/2,z+1/2,x + - y+1/2,-z+1/2,-x + - z+1/2,y+1/2,-x + - -y+1/2,z+1/2,-x + - -z+1/2,-y,-x+1/2 + - -y,-z,x + - z+1/2,-y,x+1/2 + - -z+1/2,y,x+1/2 + - -x,-y,-z+1/2 + - y,-x,-z+1/2 + - x,y,-z+1/2 + - -y,x,-z+1/2 + - -x,y+1/2,z + - -y+1/2,-x,z + - x,-y+1/2,z + - y+1/2,x,z + - -z,-x,-y+1/2 + - x,-z,-y+1/2 + - z,x,-y+1/2 + - -x,z,-y+1/2 + - -z,x+1/2,y + - -x+1/2,-z,y + - z,-x+1/2,y + - x+1/2,z,y + - -y,-z,-x+1/2 + - -y,z,x+1/2 + - -z,-y,x+1/2 + - y,-z,x+1/2 + - z,y+1/2,x + - y+1/2,z+1/2,-x+1/2 + - -z,y+1/2,-x + - z,-y+1/2,-x + universal_h_m: F m -3 c (a+1/4,b+1/4,c+1/4) +- crystal_class: cubic + hall: -I 4 2 3 (x+1/4,y+1/4,z+1/4) + hermann_mauguin: I m -3 m (a-1/4,b-1/4,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x+1/2,-y+1/2 + - x,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x + - -z+1/2,y,x + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z,-x,-y + - x+1/2,-z,-y + - z+1/2,x+1/2,-y + - -x,z+1/2,-y + - -z,x+1/2,y+1/2 + - -x,-z,y+1/2 + - z+1/2,-x,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y,-z,-x + - -y,z+1/2,x+1/2 + - -z,-y,x+1/2 + - y+1/2,-z,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x + - -z,y+1/2,-x + - z+1/2,-y,-x + number: 229 + schoenflies: Oh^9 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x+1/2,-y+1/2 + - x,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x + - -z+1/2,y,x + - -x+1/2,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - -x+1/2,y,z + - -y+1/2,-x+1/2,z + - x,-y+1/2,z + - y,x,z + - -z+1/2,-x+1/2,-y+1/2 + - x,-z+1/2,-y+1/2 + - z,x,-y+1/2 + - -x+1/2,z,-y+1/2 + - -z+1/2,x,y + - -x+1/2,-z+1/2,y + - z,-x+1/2,y + - x,z,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z,x + - -z+1/2,-y+1/2,x + - y,-z+1/2,x + - z,y,x + - y,z,-x+1/2 + - -z+1/2,y,-x+1/2 + - z,-y+1/2,-x+1/2 + - x+1/2,y+1/2,z+1/2 + - -y,x+1/2,z+1/2 + - -x,-y,z+1/2 + - y+1/2,-x,z+1/2 + - x+1/2,-y,-z + - y+1/2,x+1/2,-z + - -x,y+1/2,-z + - -y,-x,-z + - z+1/2,x+1/2,y+1/2 + - -x,z+1/2,y+1/2 + - -z,-x,y+1/2 + - x+1/2,-z,y+1/2 + - z+1/2,-x,-y + - x+1/2,z+1/2,-y + - -z,x+1/2,-y + - -x,-z,-y + - y+1/2,z+1/2,x+1/2 + - y+1/2,-z,-x + - z+1/2,y+1/2,-x + - -y,z+1/2,-x + - -z,-y,-x + - -y,-z,x+1/2 + - z+1/2,-y,x+1/2 + - -z,y+1/2,x+1/2 + - -x,-y,-z + - y+1/2,-x,-z + - x+1/2,y+1/2,-z + - -y,x+1/2,-z + - -x,y+1/2,z+1/2 + - -y,-x,z+1/2 + - x+1/2,-y,z+1/2 + - y+1/2,x+1/2,z+1/2 + - -z,-x,-y + - x+1/2,-z,-y + - z+1/2,x+1/2,-y + - -x,z+1/2,-y + - -z,x+1/2,y+1/2 + - -x,-z,y+1/2 + - z+1/2,-x,y+1/2 + - x+1/2,z+1/2,y+1/2 + - -y,-z,-x + - -y,z+1/2,x+1/2 + - -z,-y,x+1/2 + - y+1/2,-z,x+1/2 + - z+1/2,y+1/2,x+1/2 + - y+1/2,z+1/2,-x + - -z,y+1/2,-x + - z+1/2,-y,-x + universal_h_m: I m -3 m (a-1/4,b-1/4,c-1/4) +- crystal_class: cubic + hall: -F 4 2 3 (x+1/4,y+1/4,z+1/4) + hermann_mauguin: F m -3 m (a-1/4,b-1/4,c-1/4) + ncsym: + - x,y,z + - -y+1/2,x+1/2,z+1/2 + - -x,-y,z + - y+1/2,-x+1/2,z+1/2 + - x,-y,-z + - y+1/2,x+1/2,-z+1/2 + - -x,y,-z + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z+1/2,y+1/2 + - -z,-x,y + - x+1/2,-z+1/2,y+1/2 + - z,-x,-y + - x+1/2,z+1/2,-y+1/2 + - -z,x,-y + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z,-x + - z+1/2,y+1/2,-x+1/2 + - -y,z,-x + - -z+1/2,-y+1/2,-x+1/2 + - -y,-z,x + - z+1/2,-y+1/2,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x+1/2,-y+1/2,-z+1/2 + - y,-x,-z + - x+1/2,y+1/2,-z+1/2 + - -y,x,-z + - -x+1/2,y+1/2,z+1/2 + - -y,-x,z + - x+1/2,-y+1/2,z+1/2 + - y,x,z + - -z+1/2,-x+1/2,-y+1/2 + - x,-z,-y + - z+1/2,x+1/2,-y+1/2 + - -x,z,-y + - -z+1/2,x+1/2,y+1/2 + - -x,-z,y + - z+1/2,-x+1/2,y+1/2 + - x,z,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z+1/2,x+1/2 + - -z,-y,x + - y+1/2,-z+1/2,x+1/2 + - z,y,x + - y+1/2,z+1/2,-x+1/2 + - -z,y,-x + - z,-y,-x + number: 225 + schoenflies: Oh^5 + symops: + - x,y,z + - -y+1/2,x,z + - -x+1/2,-y+1/2,z + - y,-x+1/2,z + - x,-y+1/2,-z+1/2 + - y,x,-z+1/2 + - -x+1/2,y,-z+1/2 + - -y+1/2,-x+1/2,-z+1/2 + - z,x,y + - -x+1/2,z,y + - -z+1/2,-x+1/2,y + - x,-z+1/2,y + - z,-x+1/2,-y+1/2 + - x,z,-y+1/2 + - -z+1/2,x,-y+1/2 + - -x+1/2,-z+1/2,-y+1/2 + - y,z,x + - y,-z+1/2,-x+1/2 + - z,y,-x+1/2 + - -y+1/2,z,-x+1/2 + - -z+1/2,-y+1/2,-x+1/2 + - -y+1/2,-z+1/2,x + - z,-y+1/2,x + - -z+1/2,y,x + - -x+1/2,-y+1/2,-z+1/2 + - y,-x+1/2,-z+1/2 + - x,y,-z+1/2 + - -y+1/2,x,-z+1/2 + - -x+1/2,y,z + - -y+1/2,-x+1/2,z + - x,-y+1/2,z + - y,x,z + - -z+1/2,-x+1/2,-y+1/2 + - x,-z+1/2,-y+1/2 + - z,x,-y+1/2 + - -x+1/2,z,-y+1/2 + - -z+1/2,x,y + - -x+1/2,-z+1/2,y + - z,-x+1/2,y + - x,z,y + - -y+1/2,-z+1/2,-x+1/2 + - -y+1/2,z,x + - -z+1/2,-y+1/2,x + - y,-z+1/2,x + - z,y,x + - y,z,-x+1/2 + - -z+1/2,y,-x+1/2 + - z,-y+1/2,-x+1/2 + - x,y+1/2,z+1/2 + - -y+1/2,x+1/2,z+1/2 + - -x+1/2,-y,z+1/2 + - y,-x,z+1/2 + - x,-y,-z + - y,x+1/2,-z + - -x+1/2,y+1/2,-z + - -y+1/2,-x,-z + - z,x+1/2,y+1/2 + - -x+1/2,z+1/2,y+1/2 + - -z+1/2,-x,y+1/2 + - x,-z,y+1/2 + - z,-x,-y + - x,z+1/2,-y + - -z+1/2,x+1/2,-y + - -x+1/2,-z,-y + - y,z+1/2,x+1/2 + - y,-z,-x + - z,y+1/2,-x + - -y+1/2,z+1/2,-x + - -z+1/2,-y,-x + - -y+1/2,-z,x+1/2 + - z,-y,x+1/2 + - -z+1/2,y+1/2,x+1/2 + - -x+1/2,-y,-z + - y,-x,-z + - x,y+1/2,-z + - -y+1/2,x+1/2,-z + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x,z+1/2 + - x,-y,z+1/2 + - y,x+1/2,z+1/2 + - -z+1/2,-x,-y + - x,-z,-y + - z,x+1/2,-y + - -x+1/2,z+1/2,-y + - -z+1/2,x+1/2,y+1/2 + - -x+1/2,-z,y+1/2 + - z,-x,y+1/2 + - x,z+1/2,y+1/2 + - -y+1/2,-z,-x + - -y+1/2,z+1/2,x+1/2 + - -z+1/2,-y,x+1/2 + - y,-z,x+1/2 + - z,y+1/2,x+1/2 + - y,z+1/2,-x + - -z+1/2,y+1/2,-x + - z,-y,-x + - x+1/2,y,z+1/2 + - -y,x,z+1/2 + - -x,-y+1/2,z+1/2 + - y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,-z + - y+1/2,x,-z + - -x,y,-z + - -y,-x+1/2,-z + - z+1/2,x,y+1/2 + - -x,z,y+1/2 + - -z,-x+1/2,y+1/2 + - x+1/2,-z+1/2,y+1/2 + - z+1/2,-x+1/2,-y + - x+1/2,z,-y + - -z,x,-y + - -x,-z+1/2,-y + - y+1/2,z,x+1/2 + - y+1/2,-z+1/2,-x + - z+1/2,y,-x + - -y,z,-x + - -z,-y+1/2,-x + - -y,-z+1/2,x+1/2 + - z+1/2,-y+1/2,x+1/2 + - -z,y,x+1/2 + - -x,-y+1/2,-z + - y+1/2,-x+1/2,-z + - x+1/2,y,-z + - -y,x,-z + - -x,y,z+1/2 + - -y,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x,z+1/2 + - -z,-x+1/2,-y + - x+1/2,-z+1/2,-y + - z+1/2,x,-y + - -x,z,-y + - -z,x,y+1/2 + - -x,-z+1/2,y+1/2 + - z+1/2,-x+1/2,y+1/2 + - x+1/2,z,y+1/2 + - -y,-z+1/2,-x + - -y,z,x+1/2 + - -z,-y+1/2,x+1/2 + - y+1/2,-z+1/2,x+1/2 + - z+1/2,y,x+1/2 + - y+1/2,z,-x + - -z,y,-x + - z+1/2,-y+1/2,-x + - x+1/2,y+1/2,z + - -y,x+1/2,z + - -x,-y,z + - y+1/2,-x,z + - x+1/2,-y,-z+1/2 + - y+1/2,x+1/2,-z+1/2 + - -x,y+1/2,-z+1/2 + - -y,-x,-z+1/2 + - z+1/2,x+1/2,y + - -x,z+1/2,y + - -z,-x,y + - x+1/2,-z,y + - z+1/2,-x,-y+1/2 + - x+1/2,z+1/2,-y+1/2 + - -z,x+1/2,-y+1/2 + - -x,-z,-y+1/2 + - y+1/2,z+1/2,x + - y+1/2,-z,-x+1/2 + - z+1/2,y+1/2,-x+1/2 + - -y,z+1/2,-x+1/2 + - -z,-y,-x+1/2 + - -y,-z,x + - z+1/2,-y,x + - -z,y+1/2,x + - -x,-y,-z+1/2 + - y+1/2,-x,-z+1/2 + - x+1/2,y+1/2,-z+1/2 + - -y,x+1/2,-z+1/2 + - -x,y+1/2,z + - -y,-x,z + - x+1/2,-y,z + - y+1/2,x+1/2,z + - -z,-x,-y+1/2 + - x+1/2,-z,-y+1/2 + - z+1/2,x+1/2,-y+1/2 + - -x,z+1/2,-y+1/2 + - -z,x+1/2,y + - -x,-z,y + - z+1/2,-x,y + - x+1/2,z+1/2,y + - -y,-z,-x+1/2 + - -y,z+1/2,x + - -z,-y,x + - y+1/2,-z,x + - z+1/2,y+1/2,x + - y+1/2,z+1/2,-x+1/2 + - -z,y+1/2,-x+1/2 + - z+1/2,-y,-x+1/2 + universal_h_m: F m -3 m (a-1/4,b-1/4,c-1/4) +- crystal_class: tetragonal + hall: " P 4 -2ab (x,y,1/2*z)" + hermann_mauguin: P 4 b m + ncsym: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + - x,y,z+1/2 + - -y,x,z+1/2 + - -x,-y,z+1/2 + - y,-x,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + number: 100 + schoenflies: C4v^2 + symops: + - x,y,z + - -y,x,z + - -x,-y,z + - y,-x,z + - -x+1/2,y+1/2,z + - -y+1/2,-x+1/2,z + - x+1/2,-y+1/2,z + - y+1/2,x+1/2,z + - x,y,z+1/2 + - -y,x,z+1/2 + - -x,-y,z+1/2 + - y,-x,z+1/2 + - -x+1/2,y+1/2,z+1/2 + - -y+1/2,-x+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - y+1/2,x+1/2,z+1/2 + universal_h_m: P 4 b m (a,b,2*c) +- crystal_class: monoclinic + hall: " C -2yc (1/2*x,y,-1/2*x+z)" + hermann_mauguin: C 1 c 1 + ncsym: + - x,y,z + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,-y,z + number: 9 + schoenflies: Cs^4 + symops: + - x,y,z + - x,-y,z+1/2 + - x+1/2,y,z+1/2 + - x+1/2,-y,z + - x+1/4,y+1/2,z+3/4 + - x+1/4,-y+1/2,z+1/4 + - x+3/4,y+1/2,z+1/4 + - x+3/4,-y+1/2,z+3/4 + universal_h_m: C 1 c 1 (2*a+c,b,c) +- crystal_class: orthorhombic + hall: " P 2c -2 (1/2*x,y,z)" + hermann_mauguin: P m c 21 + ncsym: + - x,y,z + - -x,y,z + - x,-y,z+1/2 + - -x,-y,z+1/2 + number: 26 + schoenflies: C2v^2 + symops: + - x,y,z + - -x,y,z + - x,-y,z+1/2 + - -x,-y,z+1/2 + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,-y,z+1/2 + - -x+1/2,-y,z+1/2 + universal_h_m: P m c 21 (2*a,b,c) +- crystal_class: orthorhombic + hall: " C 2 -2 (1/2*z,x,y)" + hermann_mauguin: C m m 2 + ncsym: + - x,y,z + - x,-y,z + - x,y,-z + - x,-y,-z + number: 35 + schoenflies: C2v^11 + symops: + - x,y,z + - x,-y,z + - x,y,-z + - x,-y,-z + - x,y+1/2,z+1/2 + - x,-y+1/2,z+1/2 + - x,y+1/2,-z+1/2 + - x,-y+1/2,-z+1/2 + - x+1/2,y,z + - x+1/2,-y,z + - x+1/2,y,-z + - x+1/2,-y,-z + - x+1/2,y+1/2,z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x+1/2,y+1/2,-z+1/2 + - x+1/2,-y+1/2,-z+1/2 + universal_h_m: C m m 2 (2*c,a,b) +- crystal_class: monoclinic + hall: -P 2ybc (-1/4*x+1/2*z,1/2*x,y) + hermann_mauguin: P 1 21/c 1 + ncsym: + - x,y,z + - -x+1/4,-y,z+1/2 + - -x,-y,-z + - x-1/4,y,-z-1/2 + number: 14 + schoenflies: C2h^5 + symops: + - x,y,z + - -x+1/4,-y,z+1/2 + - -x,-y,-z + - x-1/4,y,-z-1/2 + - x+3/4,y+1/2,z + - -x+1,-y+1/2,z+1/2 + - -x+3/4,-y+1/2,-z + - x+1/2,y+1/2,-z-1/2 + - x+1/4,y+1/2,z + - -x+1/2,-y+1/2,z+1/2 + - -x+1/4,-y+1/2,-z + - x,y+1/2,-z-1/2 + - x+1/2,y,z + - -x+3/4,-y,z+1/2 + - -x+1/2,-y,-z + - x+1/4,y,-z-1/2 + universal_h_m: P 1 21/c 1 (2*c,2*a+c,b) +- crystal_class: orthorhombic + hall: -P 2a 2a (1/2*y,z,x) + hermann_mauguin: P m m a + ncsym: + - x,y,z + - -x,y,z + - x,y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,-z + - -x,-y,z-1/2 + - x,-y,z-1/2 + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,y,z + - x,y,-z+1/2 + - -x,y,-z+1/2 + - -x,-y,-z + - x,-y,-z + - -x,-y,z-1/2 + - x,-y,z-1/2 + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,y,-z+1/2 + - -x+1/2,y,-z+1/2 + - -x+1/2,-y,-z + - x+1/2,-y,-z + - -x+1/2,-y,z-1/2 + - x+1/2,-y,z-1/2 + universal_h_m: P m m a (2*b,c,a) +- crystal_class: orthorhombic + hall: -P 2a 2a (1/2*y,z+1/3,x-1/4) + hermann_mauguin: P m m a + ncsym: + - x,y,z + - -x,y,z + - x,y,-z + - -x,y,-z + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,y,-z + - -x+1/2,y,-z + number: 51 + schoenflies: D2h^5 + symops: + - x,y,z + - -x,y,z + - x,y,-z + - -x,y,-z + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,y,-z + - -x+1/2,y,-z + - -x,-y+2/3,-z+1/2 + - x,-y+2/3,-z+1/2 + - -x,-y+2/3,z+1/2 + - x,-y+2/3,z+1/2 + - -x+1/2,-y+2/3,-z+1/2 + - x+1/2,-y+2/3,-z+1/2 + - -x+1/2,-y+2/3,z+1/2 + - x+1/2,-y+2/3,z+1/2 + universal_h_m: P m m a (2*b+1/4,c,a-1/3) +- crystal_class: monoclinic + hall: -P 2yc (x,1/2*y,z) + hermann_mauguin: P 1 2/c 1 + ncsym: + - x,y,z + - -x,y,-z+1/2 + - x,y+1/2,z + - -x,y+1/2,-z+1/2 + number: 13 + schoenflies: C2h^4 + symops: + - x,y,z + - -x,y,-z+1/2 + - x,y+1/2,z + - -x,y+1/2,-z+1/2 + - -x,-y,-z + - x,-y,z+1/2 + - -x,-y+1/2,-z + - x,-y+1/2,z+1/2 + universal_h_m: P 1 2/c 1 (a,2*b,c) +- crystal_class: orthorhombic + hall: -P 2 2 (1/2*x,1/2*y,z) + hermann_mauguin: P m m m + ncsym: + - x,y,z + - -x,y,z + - x,-y,z + - -x,-y,z + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,-y,z + - -x+1/2,-y,z + number: 47 + schoenflies: D2h^1 + symops: + - x,y,z + - -x,y,z + - x,-y,z + - -x,-y,z + - x+1/2,y,z + - -x+1/2,y,z + - x+1/2,-y,z + - -x+1/2,-y,z + - x,y+1/2,z + - -x,y+1/2,z + - x,-y+1/2,z + - -x,-y+1/2,z + - x+1/2,y+1/2,z + - -x+1/2,y+1/2,z + - x+1/2,-y+1/2,z + - -x+1/2,-y+1/2,z + - -x,-y,-z + - x,-y,-z + - -x,y,-z + - x,y,-z + - -x+1/2,-y,-z + - x+1/2,-y,-z + - -x+1/2,y,-z + - x+1/2,y,-z + - -x,-y+1/2,-z + - x,-y+1/2,-z + - -x,y+1/2,-z + - x,y+1/2,-z + - -x+1/2,-y+1/2,-z + - x+1/2,-y+1/2,-z + - -x+1/2,y+1/2,-z + - x+1/2,y+1/2,-z + universal_h_m: P m m m (2*a,2*b,c) +- crystal_class: monoclinic + hall: " P 2yb (x+1/4,y,z)" + hermann_mauguin: P 1 21 1 + ncsym: + - x,y,z + - -x+1/2,y+1/2,-z + number: 4 + schoenflies: C2^2 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + universal_h_m: P 1 21 1 (a-1/4,b,c) +- crystal_class: orthorhombic + hall: -P 2ac 2n (z,x,y+1/4) + hermann_mauguin: P n m a + ncsym: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x,y,-z + - -x+1/2,y+1/2,z + number: 62 + schoenflies: D2h^16 + symops: + - x,y,z + - -x+1/2,y+1/2,-z + - -x,-y,z+1/2 + - x+1/2,-y+1/2,-z+1/2 + - -x,-y,-z+1/2 + - x+1/2,-y+1/2,z+1/2 + - x,y,-z + - -x+1/2,y+1/2,z + universal_h_m: P n m a (c,a-1/4,b) diff --git a/src/xrpd_toolbox/fit_engine/fit_statistics.py b/src/xrpd_toolbox/fit_engine/fit_statistics.py new file mode 100644 index 0000000..2ab13a9 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/fit_statistics.py @@ -0,0 +1,201 @@ +import numpy as np + + +def _as_arrays( + y_calc: np.ndarray, y_obs: np.ndarray, y_obs_error: np.ndarray | None = None +) -> tuple[np.ndarray, np.ndarray, np.ndarray | None]: + y_obs = np.asarray(y_obs, dtype=float) + y_calc = np.asarray(y_calc, dtype=float) + + if y_obs.shape != y_calc.shape: + raise ValueError("y_obs and y_calc must have same shape") + + if y_obs_error is not None: + y_obs_error = np.asarray(y_obs_error, dtype=float) + + if y_obs_error.shape != y_obs.shape: + raise ValueError("y_obs_error must have same shape") + + return y_calc, y_obs, y_obs_error + + +def calculate_weights( + y_obs: np.ndarray, y_obs_error: np.ndarray | None = None +) -> np.ndarray: + """ + Rietveld weights. + + If y_obs_error is None: + w_i = 1 / y_obs_i + + Otherwise: + w_i = 1 / sigma_i^2 + """ + + y_obs = np.asarray(y_obs, dtype=float) + + if y_obs_error is None: + variance = np.clip(y_obs, 1e-12, None) + else: + sigma = np.asarray(y_obs_error, dtype=float) + variance = np.clip(sigma**2, 1e-12, None) + + return 1.0 / variance + + +def calculate_chi_squared( + y_calc: np.ndarray, y_obs: np.ndarray, y_obs_error: np.ndarray | None = None +) -> float: + """ + Weighted chi-squared: + + χ² = Σ w_i (y_obs_i - y_calc_i)^2 + + calculates chi_squared (the minimisation cost function) that is familiar to + those who do retiveld refinements + + """ + + y_calc, y_obs, y_obs_error = _as_arrays( + y_calc=y_calc, + y_obs=y_obs, + y_obs_error=y_obs_error, + ) + + w = calculate_weights(y_obs=y_obs, y_obs_error=y_obs_error) + + residual = y_obs - y_calc + + return float(np.sum(w * residual**2)) + + +def calculate_reduced_chi_squared( + y_calc: np.ndarray, + y_obs: np.ndarray, + n_parameters: int, + y_obs_error: np.ndarray | None = None, +) -> float: + """ + Reduced chi-squared: + + χ²_red = χ² / (N - P) + + where: + N = number of observations + P = number of refined parameters + """ + + n_obs = len(y_obs) + dof = n_obs - n_parameters + + if dof <= 0: + raise ValueError("Degrees of freedom must be positive") + + return ( + calculate_chi_squared( + y_calc=y_calc, + y_obs=y_obs, + y_obs_error=y_obs_error, + ) + / dof + ) + + +def calculate_rwp( + y_calc: np.ndarray, y_obs: np.ndarray, y_obs_error: np.ndarray | None = None +) -> float: + """ + Weighted profile R-factor: + + Σ w_i (y_obs_i - y_calc_i)^2 + Rwp = sqrt( -------------------------------- ) + Σ w_i y_obs_i^2 + """ + + y_calc, y_obs, y_obs_error = _as_arrays( + y_calc=y_calc, + y_obs=y_obs, + y_obs_error=y_obs_error, + ) + + w = calculate_weights(y_obs=y_obs, y_obs_error=y_obs_error) + + numerator = np.sum(w * (y_obs - y_calc) ** 2) + denominator = np.sum(w * y_obs**2) + + return float(np.sqrt(numerator / denominator)) + + +def calculate_rp( + y_calc: np.ndarray, + y_obs: np.ndarray, +) -> float: + """ + Unweighted profile R-factor: + + Σ |y_obs_i - y_calc_i| + Rp = ------------------------ + Σ |y_obs_i| + """ + + y_calc, y_obs, _ = _as_arrays(y_calc=y_calc, y_obs=y_obs) + + numerator = np.sum(np.abs(y_obs - y_calc)) + denominator = np.sum(np.abs(y_obs)) + + return float(numerator / denominator) + + +def calculate_expected_r_factor( + y_obs: np.ndarray, + n_parameters: int, + y_obs_error=None, +) -> float: + """ + Expected R-factor (Rexp): + + N - P + Rexp = sqrt(-------) + Σ w_i y_obs_i^2 + """ + + y_obs = np.asarray(y_obs, dtype=float) + + w = calculate_weights(y_obs=y_obs, y_obs_error=y_obs_error) + + n_obs = len(y_obs) + dof = n_obs - n_parameters + + if dof <= 0: + raise ValueError("Degrees of freedom must be positive") + + denominator = np.sum(w * y_obs**2) + + return float(np.sqrt(dof / denominator)) + + +def calculate_goodness_of_fit( + y_calc: np.ndarray, + y_obs: np.ndarray, + n_parameters: int, + y_obs_error: np.ndarray | None = None, +) -> float: + """ + Goodness-of-fit (GoF), also called chi: + + Rwp + GoF = ----- + Rexp + + equivalently: + + GoF = sqrt(reduced chi-squared) + """ + + return calculate_rwp( + y_calc=y_calc, y_obs=y_obs, y_obs_error=y_obs_error + ) / calculate_expected_r_factor( + y_obs=y_obs, + n_parameters=n_parameters, + y_obs_error=y_obs_error, + ) diff --git a/src/xrpd_toolbox/fit_engine/fitting_core.py b/src/xrpd_toolbox/fit_engine/fitting_core.py new file mode 100644 index 0000000..a4256da --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/fitting_core.py @@ -0,0 +1,687 @@ +"""Refinement utilities for XRPD model fitting. + +This module provides an interface for refining parameterised models +against observed data using SciPy optimizers. It supports both +least-squares and general minimization methods, with optional live plotting. +""" + +from __future__ import annotations + +import time +from abc import abstractmethod +from collections.abc import Callable, Sequence +from copy import deepcopy +from dataclasses import dataclass +from typing import ( + Any, + Generic, + Literal, + Self, + TypeVar, + Union, + cast, + get_args, + get_origin, +) + +import matplotlib.pyplot as plt +import numpy as np +from matplotlib.axes import Axes +from matplotlib.backends.backend_agg import FigureCanvasAgg +from matplotlib.figure import Figure +from matplotlib.lines import Line2D +from scipy import optimize + +from xrpd_toolbox.core import ( + Parameter, + ParameterArray, + ScatteringData, + XRPDBaseModel, + XYEData, +) +from xrpd_toolbox.fit_engine.fit_statistics import ( + calculate_chi_squared, + calculate_rp, + calculate_rwp, +) + +# TODO: Expand this to other methods: simulated annealing etc, AI stuff? +RefineMethod = Literal[ + "least_squares", + "trf", + "dogbox", + "lm", + "nelder-mead", + "powell", + "cg", + "bfgs", + "l-bfgs-b", + "tnc", + "cobyla", + "slsqp", + "trust-constr", + "dogleg", + "trust-ncg", + "trust-exact", + "trust-krylov", +] + + +def is_parameter_like(annotation): + return Parameter in get_args(annotation) + + +def is_number_like(annotation) -> bool: + origin = get_origin(annotation) + + if annotation in (float, int): + return True + + if origin is Union: + return any(is_number_like(arg) for arg in get_args(annotation)) + + return False + + +# class RefinementBaseModel(XRPDBaseModel, extra="allow"): +# ^ dont do this unless you want serualisation to get messy +class RefinementBaseModel(XRPDBaseModel): + """ + This class is use to contain Parameters, on it's own this class cannot be refined. + + In the RefinementBaseModel ANYTHING that is a Parameter can be refined. + eg. Therefore if you set cubic lattice angles to refine, you will break symmetry. + This requires the user to know what they're doing. + With great power comes great reposibility""" + + def get_bounds_from_metadata(self, metadata): + lower = None + upper = None + + for meta in metadata: + ge = getattr(meta, "ge", None) + gt = getattr(meta, "gt", None) + le = getattr(meta, "le", None) + lt = getattr(meta, "lt", None) + + if gt is not None: + lower = float(gt) + elif ge is not None and lower is None: + lower = float(ge) + + if lt is not None: + upper = float(lt) + elif le is not None and upper is None: + upper = float(le) + + if lower is None: + lower = -np.inf + if upper is None: + upper = np.inf + + bounds = [float(lower), float(upper)] + return bounds + + def parameterise_all(self, refine: bool = False): + for name, field_info in type(self).model_fields.items(): + if is_parameter_like(annotation=field_info.annotation): + field = getattr(self, name) + + if not isinstance(field, Parameter): + bounds = self.get_bounds_from_metadata(field_info.metadata) + + setattr( + self, + name, + Parameter(value=float(field), refine=refine, bounds=bounds), + ) + + def deparameterise(self, value, parent, key): + if isinstance(value, Parameter): + setattr(parent, key, float(value.value)) + return + + if isinstance(value, RefinementBaseModel): + for sub_name in type(value).model_fields: + self.deparameterise( + getattr(value, sub_name), + value, + sub_name, + ) + return + + if isinstance(value, (tuple, list)): + for i, obj in enumerate(value): + self.deparameterise(obj, value, i) + return + + def deparameterise_all(self): + """Turns things that maybe a Parmaeter into a float, + such that it can be more easily serialised""" + + for name in type(self).model_fields: + self.deparameterise(getattr(self, name), self, name) + + def path_to_string(self, path) -> str: + out = [] + for p in path: + if isinstance(p, int): + out[-1] = f"{out[-1]}[{p}]" + else: + out.append(p) + return ".".join(out) + + def iter_parameters(self, prefix=()): + fields = type(self).model_fields + + for name in fields: + value = getattr(self, name) + path = prefix + (name,) + + if isinstance(value, Parameter): + yield path, value + continue + + elif isinstance(value, ParameterArray): + for i, p in enumerate(value.parameter_array): + subpath = path + (i,) + yield subpath, p + + elif isinstance(value, RefinementBaseModel): + yield from value.iter_parameters(path) + + elif isinstance(value, (list, tuple)): + for i, v in enumerate(value): + subpath = path + (i,) + + if isinstance(v, Parameter): + yield subpath, v + elif isinstance(v, RefinementBaseModel): + yield from v.iter_parameters(subpath) + + elif isinstance(value, dict): + for k, v in value.items(): + subpath = path + (k,) + + if isinstance(v, Parameter): + yield subpath, v + elif isinstance(v, RefinementBaseModel): + yield from v.iter_parameters(subpath) + + def model_post_init(self, __context: Any): + params = self._collect_parameters() + self._bind_parameters(params) + + def _collect_parameters(self) -> dict[str, Parameter]: + params: dict[str, Parameter] = {} + + for name, value in self.__dict__.items(): + if isinstance(value, Parameter): + params[name] = value + + return params + + def _bind_parameters(self, params: dict) -> None: + for name, param in params.items(): + param._name = name # noqa + param._model = self # noqa + + # def iter_parameters(self, prefix=()): + # """this version is better - but breaks if Paramater aren't fixed""" + + # stack = deque([(prefix, self)]) + + # while stack: + # path, value = stack.pop() + + # # --- Parameter (fast path, most important) --- + # if isinstance(value, Parameter): + # yield path, value + # continue + + # # --- Model --- + # if isinstance(value, RefinementBaseModel): + # for name in value.model_fields: + # stack.append((path + (name,), getattr(value, name))) + # continue + + # # --- Mapping --- + # if isinstance(value, dict): + # for k, v in value.items(): # type: ignore - this is impossible to not have items # noqa + # stack.append((path + (k,), v)) + # continue + + # # --- Iterable containers (lists, tuples, ParameterArray, etc.) --- + # if isinstance(value, Iterable) and not isinstance(value, (str, bytes)): + # # special-case: ParameterArray exposes internal list + # if hasattr(value, "parameter_array"): + # value = value.parameter_array + + # for i, v in enumerate(value): + # stack.append((path + (i,), v)) + + def get_refinement_parameters(self) -> dict: + result = {} + seen = set() + + for path, p in self.iter_parameters(): + if not p.refine: + continue + + pid = id(p) + + # this bit can be removed after I have fixed how parameter stores equiv vals + if pid in seen: + continue + + seen.add(pid) + + # Only build string here (once) + key = self.path_to_string(path) + result[key] = p.value + + return result + + def get_param_by_path(self, path: str) -> Parameter: + obj = self + tokens = path.split(".") + + for token in tokens: + if "[" in token: + name, rest = token.split("[", 1) + obj = getattr(obj, name) + obj = obj[int(rest[:-1])] # strip trailing ']' + else: + obj = getattr(obj, token) + + if not isinstance(obj, Parameter): + raise TypeError(f"{path} does not resolve to Parameter") + + return obj + + def set_refinement_parameters(self, values: dict[str, float]): + # Build mapping once + path_map = {} + seen = set() + + add_seen = seen.add + + for path, p in self.iter_parameters(): + if not p.refine: + continue + + pid = id(p) + if pid in seen: + continue + + add_seen(pid) + path_map[self.path_to_string(path)] = p + + # Apply updates + for key, val in values.items(): + path_map[key].value = float(val) + + def refine_none(self, keep_refined: list[str] | None = None): + if keep_refined is None: + keep_refined = [] + + for name, param in self.iter_parameters(): + if name[-1] in keep_refined: + continue + else: + param.refine = False + + def refine_all(self, keep_fixed: list[str] | None = None): + if keep_fixed is None: + keep_fixed = [] + + for name, param in self.iter_parameters(): + if name[-1] in keep_fixed: + continue + else: + param.refine = True + + +ModelDataVar = TypeVar("ModelDataVar", XYEData, ScatteringData) + + +class Model(RefinementBaseModel, Generic[ModelDataVar]): + """A model can be refined by the refiner. It must contain: + data and a way to calculate_profile + + This class should contain RefinementBaseModel classes or Parameters/Parameter arrays + """ + + data: ModelDataVar + + @abstractmethod + def calculate_profile(self): + raise NotImplementedError("Must implmenet calculate_profile for Model subclass") + + def refine( + self, + method: RefineMethod = "least_squares", + *, + copy_model: bool = False, + bounds: Sequence[tuple[float, float]] | None = None, + plot: bool = False, + plot_every: int = 10, + step_time: float | None = None, + max_nfev: int = 1000, + maxiter: int | None = None, + callback: Callable[[np.ndarray], None] | None = None, + verbose: bool = True, + **kwargs: Any, + ) -> tuple[dict[str, float], Self, optimize.OptimizeResult]: + """This optimises the model""" + + return refine_model( + self, + method=method, + copy_model=copy_model, + bounds=bounds, + plot=plot, + plot_every=plot_every, + step_time=step_time, + max_nfev=max_nfev, + maxiter=maxiter, + callback=callback, + verbose=verbose, + **kwargs, + ) + + +ModelType = TypeVar("ModelType", bound=Model) + + +@dataclass +class PlotState: + fig: Figure + ax: Axes + lines: tuple[Line2D, Line2D, Line2D] + canvas: FigureCanvasAgg + background: Any + offset: float + + +def setup_plot(model: Model) -> PlotState: + plt.ion() + fig, ax = plt.subplots() + + x = model.data.x + y_obs = model.data.y + y_calc = model.calculate_profile() + offset = -0.1 * np.max(y_obs) + + (line_obs,) = ax.plot( + x, + y_obs, + linestyle="none", + marker=".", + color="black", + label="Observed", + ) + (line_calc,) = ax.plot(x, y_calc, color="red", label="Calculated") + (line_diff,) = ax.plot( + x, + y_obs - y_calc + offset, + color="blue", + label="Obs - Calc", + ) + + ax.legend() + + x_unit = getattr(model.data, "x_unit", "index") + ax.set_xlabel(x_unit) + ax.set_ylabel("Intensity") + + ax.relim() + + canvas = cast(FigureCanvasAgg, fig.canvas) + canvas.draw() + background = canvas.copy_from_bbox(ax.bbox) + + return PlotState( + fig, ax, (line_obs, line_calc, line_diff), canvas, background, offset + ) + + +def update_plot(model: Model, plot_state: PlotState) -> None: + line_obs, line_calc, line_diff = plot_state.lines + + y_obs = model.data.y + y_calc = model.calculate_profile() + + line_calc.set_ydata(y_calc) + line_diff.set_ydata(y_obs - y_calc + plot_state.offset) + + plot_state.ax.relim() + plot_state.ax.autoscale_view() + + # Draw axes frame after rescaling + plot_state.canvas.draw() + + # Explicitly draw animated artists (lines) + plot_state.ax.draw_artist(line_obs) + plot_state.ax.draw_artist(line_calc) + plot_state.ax.draw_artist(line_diff) + plot_state.canvas.blit(plot_state.ax.bbox) + + plot_state.canvas.flush_events() + + +def _get_refinable_parameters(model: Model) -> list[tuple[str, Parameter]]: + seen_ids: set[int] = set() + refinable: list[tuple[str, Parameter]] = [] + + for path, parameter in model.iter_parameters(): + if not parameter.refine: + continue + + if id(parameter) in seen_ids: + continue + + if not isinstance(parameter.value, (int, float, np.integer, np.floating)): + continue + + seen_ids.add(id(parameter)) + refinable.append((".".join(str(token) for token in path), parameter)) + + return refinable + + +def _build_parameter_vectors( + parameters: Sequence[tuple[str, Parameter]], +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + x0 = np.empty(len(parameters), dtype=float) + lower = np.empty(len(parameters), dtype=float) + upper = np.empty(len(parameters), dtype=float) + + for index, (_, parameter) in enumerate(parameters): + x0[index] = float(parameter.value) + lower[index], upper[index] = parameter.bounds + + return x0, lower, upper + + +def _update_parameters( + parameters: Sequence[tuple[str, Parameter]], values: np.ndarray +) -> None: + for index, (_, parameter) in enumerate(parameters): + parameter.value = float(values[index]) + + +def _default_plot_callback(plot_state: PlotState, model: Model, interval: int): + counter = {"step": 0} + + def callback() -> None: + counter["step"] += 1 + if counter["step"] % interval == 0: + update_plot(model, plot_state) + + return callback + + +def refine_model( + model: ModelType, + method: RefineMethod = "least_squares", + *, + copy_model: bool = False, + bounds: Sequence[tuple[float, float]] | None = None, + plot: bool = False, + plot_every: int = 10, + step_time: float | None = None, + max_nfev: int = 1000, + maxiter: int | None = None, + callback: Callable[[np.ndarray], None] | None = None, + verbose: bool = True, + **kwargs: Any, +) -> tuple[dict[str, float], ModelType, optimize.OptimizeResult]: + """Refine a Model using SciPy optimization routines. + + Parameters + ---------- + model : Model + Model containing `data`, `calculate_profile`, and refinable parameters. + method : RefineMethod, optional + Optimization method. ``least_squares`` is the default. + copy_model : bool, optional + If True, the input model is deep-copied before refinement. + bounds : Optional[Sequence[Tuple[float, float]]], optional + Optional parameter bounds for ``minimize``. If not provided, parameter + bounds are inferred from the model's Parameter objects. + plot : bool, optional + If True, show a live refinement plot. + plot_every : int, optional + Update the plot every N iterations. + step_time : Optional[float], optional + Time in seconds to pause during each optimization evaluation. + max_nfev : int, optional + Maximum function evaluations for least-squares optimization. + maxiter : Optional[int], optional + Maximum iterations for general minimization. + callback : Optional[Callable[[np.ndarray], None]], optional + Optional callback invoked with the current parameter vector. + verbose : bool, optional + If True (default), print chi-squared and parameter values after each evaluation. + **kwargs : Any + Additional optimizer-specific keyword arguments. + + Returns + ------- + tuple[dict[str, float], ModelType, optimize.OptimizeResult] + A tuple containing updated parameter values, the refined model, + and the SciPy optimization result. + """ + optimized_model = deepcopy(model) if copy_model else model + parameters = _get_refinable_parameters(optimized_model) + + if not parameters: + raise ValueError("No refinable parameters found") + + x0, lower, upper = _build_parameter_vectors(parameters) + y_obs = np.asarray(optimized_model.data.y, dtype=float) + + plot_state: PlotState | None = None + plot_callback: Callable[[], None] + + if plot: + plot_state = setup_plot(optimized_model) + plot_callback = _default_plot_callback(plot_state, optimized_model, plot_every) + else: + + def _no_plot() -> None: + pass + + plot_callback = _no_plot + + def _evaluate(x: np.ndarray) -> np.ndarray: + _update_parameters(parameters, x) + if step_time is not None and step_time > 0: + time.sleep(step_time) + + if callback is not None: + callback(x) + + plot_callback() + y_calc = optimized_model.calculate_profile() + residuals = y_obs - np.asarray(y_calc, dtype=float) + + chi_squared = calculate_chi_squared( + y_calc=y_calc, y_obs=model.data.y, y_obs_error=model.data.e + ) + + rwp = calculate_rwp(y_calc=y_calc, y_obs=model.data.y, y_obs_error=model.data.e) + rp = calculate_rp(y_calc=y_calc, y_obs=model.data.y) + + print(f"Chi-squared: {chi_squared}") + print(f"Rwp: {rwp}") + print(f"Rp: {rp}") + + if verbose: + for path, param in parameters: + value = param.value + + if abs(float(value)) >= 10000: + value_str = f"{value:12.3e}" + else: + value_str = f"{value:12.3f}" + + print(f"{path:<40} : {value_str}") + + print() + + return residuals + + if method in {"least_squares", "trf", "dogbox", "lm"}: + solver_kwargs: dict[str, Any] = { + "x0": x0, + "bounds": (lower, upper), + "max_nfev": max_nfev, + **kwargs, + } + + if method != "least_squares": + solver_kwargs["method"] = method + + result = optimize.least_squares(_evaluate, **solver_kwargs) + else: + + def _objective(x: np.ndarray) -> float: + residual = _evaluate(x) + return float(np.dot(residual, residual)) + + minimize_bounds = ( + bounds if bounds is not None else list(zip(lower, upper, strict=True)) + ) + minimize_options = kwargs.pop("options", {}) + if maxiter is not None: + minimize_options["maxiter"] = maxiter + + result = optimize.minimize( + _objective, + x0, + method=method, + bounds=minimize_bounds, + options=minimize_options, + **kwargs, + ) + + _update_parameters(parameters, np.asarray(result.x, dtype=float)) + updated = { + path: float(result.x[index]) for index, (path, _) in enumerate(parameters) + } + + if plot and plot_state is not None: + plt.close(plot_state.fig) + + return updated, optimized_model, result + + +if __name__ == "__main__": + rf = RefinementBaseModel() + rf["a"] = 1 + + print(rf.model_dump_json()) + + print(rf) diff --git a/src/xrpd_toolbox/fit_engine/form_factors.py b/src/xrpd_toolbox/fit_engine/form_factors.py new file mode 100644 index 0000000..a44ad64 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/form_factors.py @@ -0,0 +1,4096 @@ +""" +Contains atomic scattering factors from +"New Analytical Scattering Factor Functions for Free Atoms +and Ions for Free Atoms and Ions", +D. Waasmaier & A. Kirfel, +*Acta Cryst.* **(1995).** A51, 416-413. + +Also, tabulated coefficients for calculation of Compton Cross Section as a function of +sin(theta)/lambda from +"Analytic Approximations to Incoherently Scattered X-Ray Intensities", +H. H. M. Balyuzi, *Acta Cryst.* **(1975).** A31, 600. + +""" + +# +# The atomic scattering factor is calculated using the method developed by +# D. Waasmaier & A. Kirfel +# +# New Analytical Scattering Factor Functions for Free Atoms +# and Ions for Free Atoms and Ions +# D. Waasmaier & A. Kirfel +# Acta Cryst. (1995). A51, 416-413 +# +# fo the non-dispersive part of the atomic scattering factor is a +# function of the selected element and of sin(theta)/lambda, where +# lambda is the photon wavelengh and theta is incident angle. +# This function can be approximated by a function: +# +# f0[k] = c + [SUM a_i*EXP(-b_i*(k^2)) ] +# i=1,5 +# +# where k = sin(theta) / lambda and c, a_i and b_i +# are the coefficients tabulated in this file (in columns: +# a1 a2 a3 a4 a5 c b1 b2 b3 b4 b5 +# +X_RAY_FORM_FACTORS = { + "H": [ + 0.413048, + 0.294953, + 0.187491, + 0.080701, + 0.023736, + 0.000049, + 15.569946, + 32.398468, + 5.711404, + 61.889874, + 1.334118, + ], + "He": [ + 0.732354, + 0.753896, + 0.283819, + 0.190003, + 0.039139, + 0.000487, + 11.553918, + 4.595831, + 1.546299, + 26.463964, + 0.377523, + ], + "Li": [ + 0.974637, + 0.158472, + 0.811855, + 0.262416, + 0.790108, + 0.002542, + 4.334946, + 0.342451, + 97.102966, + 201.363831, + 1.409234, + ], + "Be": [ + 1.533712, + 0.638283, + 0.601052, + 0.106139, + 1.118414, + 0.002511, + 42.662079, + 0.595420, + 99.106499, + 0.151340, + 1.843093, + ], + "B": [ + 2.085185, + 1.064580, + 1.062788, + 0.140515, + 0.641784, + 0.003823, + 23.494068, + 1.137894, + 61.238976, + 0.114886, + 0.399036, + ], + "C": [ + 2.657506, + 1.078079, + 1.490909, + -4.241070, + 0.713791, + 4.297983, + 14.780758, + 0.776775, + 42.086842, + -0.000294, + 0.239535, + ], + "N": [ + 11.893780, + 3.277479, + 1.858092, + 0.858927, + 0.912985, + -11.80490, + 0.000158, + 10.232723, + 30.344690, + 0.656065, + 0.217287, + ], + "O": [ + 2.960427, + 2.508818, + 0.637853, + 0.722838, + 1.142756, + 0.027014, + 14.182259, + 5.936858, + 0.112726, + 34.958481, + 0.390240, + ], + "F": [ + 3.511943, + 2.772244, + 0.678385, + 0.915159, + 1.089261, + 0.032557, + 10.687859, + 4.380466, + 0.093982, + 27.255203, + 0.313066, + ], + "Ne": [ + 4.183749, + 2.905726, + 0.520513, + 1.135641, + 1.228065, + 0.025576, + 8.175457, + 3.252536, + 0.063295, + 21.813910, + 0.224952, + ], + "Na": [ + 4.910127, + 3.081783, + 1.262067, + 1.098938, + 0.560991, + 0.079712, + 3.281434, + 9.119178, + 0.102763, + 132.013947, + 0.405878, + ], + "Mg": [ + 4.708971, + 1.194814, + 1.558157, + 1.170413, + 3.239403, + 0.126842, + 4.875207, + 108.506081, + 0.111516, + 48.292408, + 1.928171, + ], + "Al": [ + 4.730796, + 2.313951, + 1.541980, + 1.117564, + 3.154754, + 0.139509, + 3.628931, + 43.051167, + 0.095960, + 108.932388, + 1.555918, + ], + "Si": [ + 5.275329, + 3.191038, + 1.511514, + 1.356849, + 2.519114, + 0.145073, + 2.631338, + 33.730728, + 0.081119, + 86.288643, + 1.170087, + ], + "P": [ + 1.950541, + 4.146930, + 1.494560, + 1.522042, + 5.729711, + 0.155233, + 0.908139, + 27.044952, + 0.071280, + 67.520187, + 1.981173, + ], + "S": [ + 6.372157, + 5.154568, + 1.473732, + 1.635073, + 1.209372, + 0.154722, + 1.514347, + 22.092527, + 0.061373, + 55.445175, + 0.646925, + ], + "Cl": [ + 1.446071, + 6.870609, + 6.151801, + 1.750347, + 0.634168, + 0.146773, + 0.052357, + 1.193165, + 18.343416, + 46.398396, + 0.401005, + ], + "Ar": [ + 7.188004, + 6.638454, + 0.454180, + 1.929593, + 1.523654, + 0.265954, + 0.956221, + 15.339877, + 15.339862, + 39.043823, + 0.062409, + ], + "K": [ + 8.163991, + 7.146945, + 1.070140, + 0.877316, + 1.486434, + 0.253614, + 12.816323, + 0.808945, + 210.327011, + 39.597652, + 0.052821, + ], + "Ca": [ + 8.593655, + 1.477324, + 1.436254, + 1.182839, + 7.113258, + 0.196255, + 10.460644, + 0.041891, + 81.390381, + 169.847839, + 0.688098, + ], + "Sc": [ + 1.476566, + 1.487278, + 1.600187, + 9.177463, + 7.099750, + 0.157765, + 53.131023, + 0.035325, + 137.319489, + 9.098031, + 0.602102, + ], + "Ti": [ + 9.818524, + 1.522646, + 1.703101, + 1.768774, + 7.082555, + 0.102473, + 8.001879, + 0.029763, + 39.885422, + 120.157997, + 0.532405, + ], + "V": [ + 10.473575, + 1.547881, + 1.986381, + 1.865616, + 7.056250, + 0.067744, + 7.081940, + 0.026040, + 31.909672, + 108.022842, + 0.474882, + ], + "Cr": [ + 11.007069, + 1.555477, + 2.985293, + 1.347855, + 7.034779, + 0.065510, + 6.366281, + 0.023987, + 23.244839, + 105.774498, + 0.429369, + ], + "Mn": [ + 11.709542, + 1.733414, + 2.673141, + 2.023368, + 7.003180, + -0.147293, + 5.597120, + 0.017800, + 21.788420, + 89.517914, + 0.383054, + ], + "Fe": [ + 12.311098, + 1.876623, + 3.066177, + 2.070451, + 6.975185, + -0.304931, + 5.009415, + 0.014461, + 18.743040, + 82.767876, + 0.346506, + ], + "Co": [ + 12.914510, + 2.481908, + 3.466894, + 2.106351, + 6.960892, + -0.936572, + 4.507138, + 0.009126, + 16.438129, + 76.987320, + 0.314418, + ], + "Ni": [ + 13.521865, + 6.947285, + 3.866028, + 2.135900, + 4.284731, + -2.762697, + 4.077277, + 0.286763, + 14.622634, + 71.966080, + 0.004437, + ], + "Cu": [ + 14.014192, + 4.784577, + 5.056806, + 1.457971, + 6.932996, + -3.254477, + 3.738280, + 0.003744, + 13.034982, + 72.554794, + 0.265666, + ], + "Zn": [ + 14.741002, + 6.907748, + 4.642337, + 2.191766, + 38.424042, + -36.915829, + 3.388232, + 0.243315, + 11.903689, + 63.312130, + 0.000397, + ], + "Ga": [ + 15.758946, + 6.841123, + 4.121016, + 2.714681, + 2.395246, + -0.847395, + 3.121754, + 0.226057, + 12.482196, + 66.203621, + 0.007238, + ], + "Ge": [ + 16.540613, + 1.567900, + 3.727829, + 3.345098, + 6.785079, + 0.018726, + 2.866618, + 0.012198, + 13.432163, + 58.866047, + 0.210974, + ], + "As": [ + 17.025642, + 4.503441, + 3.715904, + 3.937200, + 6.790175, + -2.984117, + 2.597739, + 0.003012, + 14.272119, + 50.437996, + 0.193015, + ], + "Se": [ + 17.354071, + 4.653248, + 4.259489, + 4.136455, + 6.749163, + -3.160982, + 2.349787, + 0.002550, + 15.579460, + 45.181202, + 0.177432, + ], + "Br": [ + 17.550570, + 5.411882, + 3.937180, + 3.880645, + 6.707793, + -2.492088, + 2.119226, + 16.557184, + 0.002481, + 42.164009, + 0.162121, + ], + "Kr": [ + 17.655279, + 6.848105, + 4.171004, + 3.446760, + 6.685200, + -2.810592, + 1.908231, + 16.606236, + 0.001598, + 39.917473, + 0.146896, + ], + "Rb": [ + 8.123134, + 2.138042, + 6.761702, + 1.156051, + 17.679546, + 1.139548, + 15.142385, + 33.542667, + 0.129372, + 224.132507, + 1.713368, + ], + "Sr": [ + 17.730219, + 9.795867, + 6.099763, + 2.620025, + 0.600053, + 1.140251, + 1.563060, + 14.310868, + 0.120574, + 135.771317, + 0.120574, + ], + "Y": [ + 17.792040, + 10.253252, + 5.714949, + 3.170516, + 0.918251, + 1.131787, + 1.429691, + 13.132816, + 0.112173, + 108.197029, + 0.112173, + ], + "Zr": [ + 17.859772, + 10.911038, + 5.821115, + 3.512513, + 0.746965, + 1.124859, + 1.310692, + 12.319285, + 0.104353, + 91.777542, + 0.104353, + ], + "Nb": [ + 17.958399, + 12.063054, + 5.007015, + 3.287667, + 1.531019, + 1.123452, + 1.211590, + 12.246687, + 0.098615, + 75.011948, + 0.098615, + ], + "Mo": [ + 6.236218, + 17.987711, + 12.973127, + 3.451426, + 0.210899, + 1.108770, + 0.090780, + 1.108310, + 11.468720, + 66.684151, + 0.090780, + ], + "Tc": [ + 17.840963, + 3.428236, + 1.373012, + 12.947364, + 6.335469, + 1.074784, + 1.005729, + 41.901382, + 119.320541, + 9.781542, + 0.083391, + ], + "Ru": [ + 6.271624, + 17.906738, + 14.123269, + 3.746008, + 0.908235, + 1.043992, + 0.077040, + 0.928222, + 9.555345, + 35.860680, + 123.552246, + ], + "Rh": [ + 6.216648, + 17.919739, + 3.854252, + 0.840326, + 15.173498, + 0.995452, + 0.070789, + 0.856121, + 33.889484, + 121.686691, + 9.029517, + ], + "Pd": [ + 6.121511, + 4.784063, + 16.631683, + 4.318258, + 13.246773, + 0.883099, + 0.062549, + 0.784031, + 8.751391, + 34.489983, + 0.784031, + ], + "Ag": [ + 6.073874, + 17.155437, + 4.173344, + 0.852238, + 17.988686, + 0.756603, + 0.055333, + 7.896512, + 28.443739, + 110.376106, + 0.716809, + ], + "Cd": [ + 6.080986, + 18.019468, + 4.018197, + 1.303510, + 17.974669, + 0.603504, + 0.048990, + 7.273646, + 29.119284, + 95.831207, + 0.661231, + ], + "In": [ + 6.196477, + 18.816183, + 4.050479, + 1.638929, + 17.962912, + 0.333097, + 0.042072, + 6.695665, + 31.009790, + 103.284348, + 0.610714, + ], + "Sn": [ + 19.325171, + 6.281571, + 4.498866, + 1.856934, + 17.917318, + 0.119024, + 6.118104, + 0.036915, + 32.529045, + 95.037186, + 0.565651, + ], + "Sb": [ + 5.394956, + 6.549570, + 19.650681, + 1.827820, + 17.867832, + -0.290506, + 33.326523, + 0.030974, + 5.564929, + 87.130966, + 0.523992, + ], + "Te": [ + 6.660302, + 6.940756, + 19.847015, + 1.557175, + 17.802427, + -0.806668, + 33.031654, + 0.025750, + 5.065547, + 84.101616, + 0.487660, + ], + "I": [ + 19.884502, + 6.736593, + 8.110516, + 1.170953, + 17.548716, + -0.448811, + 4.628591, + 0.027754, + 31.849096, + 84.406387, + 0.463550, + ], + "Xe": [ + 19.978920, + 11.774945, + 9.332182, + 1.244749, + 17.737501, + -6.065902, + 4.143356, + 0.010142, + 28.796200, + 75.280685, + 0.413616, + ], + "Cs": [ + 17.418674, + 8.314444, + 10.323193, + 1.383834, + 19.876251, + -2.322802, + 0.399828, + 0.016872, + 25.605827, + 233.339676, + 3.826915, + ], + "Ba": [ + 19.747343, + 17.368477, + 10.465718, + 2.592602, + 11.003653, + -5.183497, + 3.481823, + 0.371224, + 21.226641, + 173.834274, + 0.010719, + ], + "La": [ + 19.966019, + 27.329655, + 11.018425, + 3.086696, + 17.335455, + -21.745489, + 3.197408, + 0.003446, + 19.955492, + 141.381973, + 0.341817, + ], + "Ce": [ + 17.355122, + 43.988499, + 20.546650, + 3.130670, + 11.353665, + -38.386017, + 0.328369, + 0.002047, + 3.088196, + 134.907654, + 18.832960, + ], + "Pr": [ + 21.551311, + 17.161730, + 11.903859, + 2.679103, + 9.564197, + -3.871068, + 2.995675, + 0.312491, + 17.716705, + 152.192825, + 0.010468, + ], + "Nd": [ + 17.331244, + 62.783924, + 12.160097, + 2.663483, + 22.239950, + -57.189842, + 0.300269, + 0.001320, + 17.026001, + 148.748993, + 2.910268, + ], + "Pm": [ + 17.286388, + 51.560162, + 12.478557, + 2.675515, + 22.960947, + -45.973682, + 0.286620, + 0.001550, + 16.223755, + 143.984512, + 2.796480, + ], + "Sm": [ + 23.700363, + 23.072214, + 12.777782, + 2.684217, + 17.204367, + -17.452166, + 2.689539, + 0.003491, + 15.495437, + 139.862473, + 0.274536, + ], + "Eu": [ + 17.186195, + 37.156837, + 13.103387, + 2.707246, + 24.419271, + -31.586687, + 0.261678, + 0.001995, + 14.787360, + 134.816299, + 2.581883, + ], + "Gd": [ + 24.898117, + 17.104952, + 13.222581, + 3.266152, + 48.995213, + -43.505684, + 2.435028, + 0.246961, + 13.996325, + 110.863091, + 0.001383, + ], + "Tb": [ + 25.910013, + 32.344139, + 13.765117, + 2.751404, + 17.064405, + -26.851971, + 2.373912, + 0.002034, + 13.481969, + 125.836510, + 0.236916, + ], + "Dy": [ + 26.671785, + 88.687576, + 14.065445, + 2.768497, + 17.067781, + -83.279831, + 2.282593, + 0.000665, + 12.920230, + 121.937187, + 0.225531, + ], + "Ho": [ + 27.150190, + 16.999819, + 14.059334, + 3.386979, + 46.546471, + -41.165253, + 2.169660, + 0.215414, + 12.213148, + 100.506783, + 0.001211, + ], + "Er": [ + 28.174887, + 82.493271, + 14.624002, + 2.802756, + 17.018515, + -77.135223, + 2.120995, + 0.000640, + 11.915256, + 114.529938, + 0.207519, + ], + "Tm": [ + 28.925894, + 76.173798, + 14.904704, + 2.814812, + 16.998117, + -70.839813, + 2.046203, + 0.000656, + 11.465375, + 111.411980, + 0.199376, + ], + "Yb": [ + 29.676760, + 65.624069, + 15.160854, + 2.830288, + 16.997850, + -60.313812, + 1.977630, + 0.000720, + 11.044622, + 108.139153, + 0.192110, + ], + "Lu": [ + 30.122866, + 15.099346, + 56.314899, + 3.540980, + 16.943729, + -51.049416, + 1.883090, + 10.342764, + 0.000780, + 89.559250, + 0.183849, + ], + "Hf": [ + 30.617033, + 15.145351, + 54.933548, + 4.096253, + 16.896156, + -49.719837, + 1.795613, + 9.934469, + 0.000739, + 76.189705, + 0.175914, + ], + "Ta": [ + 31.066359, + 15.341823, + 49.278297, + 4.577665, + 16.828321, + -44.119026, + 1.708732, + 9.618455, + 0.000760, + 66.346199, + 0.168002, + ], + "W": [ + 31.507900, + 15.682498, + 37.960129, + 4.885509, + 16.792112, + -32.864574, + 1.629485, + 9.446448, + 0.000898, + 59.980675, + 0.160798, + ], + "Re": [ + 31.888456, + 16.117104, + 42.390297, + 5.211669, + 16.767591, + -37.412682, + 1.549238, + 9.233474, + 0.000689, + 54.516373, + 0.152815, + ], + "Os": [ + 32.210297, + 16.678440, + 48.559906, + 5.455839, + 16.735533, + -43.677956, + 1.473531, + 9.049695, + 0.000519, + 50.210201, + 0.145771, + ], + "Ir": [ + 32.004436, + 1.975454, + 17.070105, + 15.939454, + 5.990003, + 4.018893, + 1.353767, + 81.014175, + 0.128093, + 7.661196, + 26.659403, + ], + "Pt": [ + 31.273891, + 18.445440, + 17.063745, + 5.555933, + 1.575270, + 4.050394, + 1.316992, + 8.797154, + 0.124741, + 40.177994, + 1.316997, + ], + "Au": [ + 16.777390, + 19.317156, + 32.979683, + 5.595453, + 10.576854, + -6.279078, + 0.122737, + 8.621570, + 1.256902, + 38.008820, + 0.000601, + ], + "Hg": [ + 16.839890, + 20.023823, + 28.428564, + 5.881564, + 4.714706, + 4.076478, + 0.115905, + 8.256927, + 1.195250, + 39.247227, + 1.195250, + ], + "Tl": [ + 16.630795, + 19.386616, + 32.808571, + 1.747191, + 6.356862, + 4.066939, + 0.110704, + 7.181401, + 1.119730, + 90.660263, + 26.014978, + ], + "Pb": [ + 16.419567, + 32.738590, + 6.530247, + 2.342742, + 19.916475, + 4.049824, + 0.105499, + 1.055049, + 25.025890, + 80.906593, + 6.664449, + ], + "Bi": [ + 16.282274, + 32.725136, + 6.678302, + 2.694750, + 20.576559, + 4.040914, + 0.101180, + 1.002287, + 25.714146, + 77.057549, + 6.291882, + ], + "Po": [ + 16.289164, + 32.807171, + 21.095163, + 2.505901, + 7.254589, + 4.046556, + 0.098121, + 0.966265, + 6.046622, + 76.598068, + 28.096128, + ], + "At": [ + 16.011461, + 32.615547, + 8.113899, + 2.884082, + 21.377867, + 3.995684, + 0.092639, + 0.904416, + 26.543257, + 68.372963, + 5.499512, + ], + "Rn": [ + 16.070229, + 32.641106, + 21.489658, + 2.299218, + 9.480184, + 4.020977, + 0.090437, + 0.876409, + 5.239687, + 69.188477, + 27.632641, + ], + "Fr": [ + 16.007385, + 32.663830, + 21.594351, + 1.598497, + 11.121192, + 4.003472, + 0.087031, + 0.840187, + 4.954467, + 199.805801, + 26.905106, + ], + "Ra": [ + 32.563690, + 21.396671, + 11.298093, + 2.834688, + 15.914965, + 3.981773, + 0.801980, + 4.590666, + 22.758972, + 160.404388, + 0.083544, + ], + "Ac": [ + 15.914053, + 32.535042, + 21.553976, + 11.433394, + 3.612409, + 3.939212, + 0.080511, + 0.770669, + 4.352206, + 21.381622, + 130.500748, + ], + "Th": [ + 15.784024, + 32.454899, + 21.849222, + 4.239077, + 11.736191, + 3.922533, + 0.077067, + 0.735137, + 4.097976, + 109.464111, + 20.512138, + ], + "Pa": [ + 32.740208, + 21.973675, + 12.957398, + 3.683832, + 15.744058, + 3.886066, + 0.709545, + 4.050881, + 19.231543, + 117.255005, + 0.074040, + ], + "U": [ + 15.679275, + 32.824306, + 13.660459, + 3.687261, + 22.279434, + 3.854444, + 0.071206, + 0.681177, + 18.236156, + 112.500038, + 3.930325, + ], + "Np": [ + 32.999901, + 22.638077, + 14.219973, + 3.672950, + 15.683245, + 3.769391, + 0.657086, + 3.854918, + 17.435474, + 109.464485, + 0.068033, + ], + "Pu": [ + 33.281178, + 23.148544, + 15.153755, + 3.031492, + 15.704215, + 3.664200, + 0.634999, + 3.856168, + 16.849735, + 121.292038, + 0.064857, + ], + "Am": [ + 33.435162, + 23.657259, + 15.576339, + 3.027023, + 15.746100, + 3.541160, + 0.612785, + 3.792942, + 16.195778, + 117.757004, + 0.061755, + ], + "Cm": [ + 15.804837, + 33.480801, + 24.150198, + 3.655563, + 15.499866, + 3.390840, + 0.058619, + 0.590160, + 3.674720, + 100.736191, + 15.408296, + ], + "Bk": [ + 15.889072, + 33.625286, + 24.710381, + 3.707139, + 15.839268, + 3.213169, + 0.055503, + 0.569571, + 3.615472, + 97.694786, + 14.754303, + ], + "Cf": [ + 33.794075, + 25.467693, + 16.048487, + 3.657525, + 16.008982, + 3.005326, + 0.550447, + 3.581973, + 14.357388, + 96.064972, + 0.052450, + ], + "H1-": [ + 0.702260, + 0.763666, + 0.248678, + 0.261323, + 0.023017, + 0.000425, + 23.945604, + 74.897919, + 6.773289, + 233.583450, + 1.337, + ], + "Li1+": [ + 0.432724, + 0.549257, + 0.376575, + -0.336481, + 0.976060, + 0.001764, + 0.260367, + 1.042836, + 7.885294, + 0.260368, + 3.042, + ], + "Be2+": [ + 3.055430, + -2.372617, + 1.044914, + 0.544233, + 0.381737, + -0.653773, + 0.001226, + 0.001227, + 1.542106, + 0.456279, + 4.047, + ], + "Cval": [ + 1.258489, + 0.728215, + 1.119856, + 2.168133, + 0.705239, + 0.019722, + 10.683769, + 0.208177, + 0.836097, + 24.603704, + 58.954, + ], + "O1-": [ + 3.106934, + 3.235142, + 1.148886, + 0.783981, + 0.676953, + 0.046136, + 19.868080, + 6.960252, + 0.170043, + 65.693512, + 0.630, + ], + "O2-": [ + 3.990247, + 2.300563, + 0.607200, + 1.907882, + 1.167080, + 0.025429, + 16.639956, + 5.636819, + 0.108493, + 47.299709, + 0.379, + ], + "F1-": [ + 0.457649, + 3.841561, + 1.432771, + 0.801876, + 3.395041, + 0.069525, + 0.917243, + 5.507803, + 0.164955, + 51.076206, + 15.821, + ], + "Na1+": [ + 3.148690, + 4.073989, + 0.767888, + 0.995612, + 0.968249, + 0.045300, + 2.594987, + 6.046925, + 0.070139, + 14.122657, + 0.217, + ], + "Mg2+": [ + 3.062918, + 4.135106, + 0.853742, + 1.036792, + 0.852520, + 0.058851, + 2.015803, + 4.417941, + 0.065307, + 9.669710, + 0.187, + ], + "Al3+": [ + 4.132015, + 0.912049, + 1.102425, + 0.614876, + 3.219136, + 0.019397, + 3.528641, + 7.378344, + 0.133708, + 0.039065, + 1.644, + ], + "Siva": [ + 2.879033, + 3.072960, + 1.515981, + 1.390030, + 4.995051, + 0.146030, + 1.239713, + 38.706276, + 0.081481, + 93.616333, + 2.770, + ], + "Si4+": [ + 3.676722, + 3.828496, + 1.258033, + 0.419024, + 0.720421, + 0.097266, + 1.446851, + 3.013144, + 0.064397, + 0.206254, + 5.970, + ], + "Cl1-": [ + 1.061802, + 7.139886, + 6.524271, + 2.355626, + 35.829403, + -34.916603, + 0.144727, + 1.171795, + 19.467655, + 60.320301, + 0.000, + ], + "K1+": [ + -17.609339, + 1.494873, + 7.150305, + 10.899569, + 15.808228, + 0.257164, + 18.840979, + 0.053453, + 0.812940, + 22.264105, + 14.351, + ], + "Ca2+": [ + 8.501441, + 12.880483, + 9.765095, + 7.156669, + 0.711160, + -21.013187, + 10.525848, + -0.004033, + 0.010692, + 0.684443, + 27.231, + ], + "Sc3+": [ + 7.104348, + 1.511488, + -53.669773, + 38.404816, + 24.532240, + 0.118642, + 0.601957, + 0.033386, + 12.572138, + 10.859736, + 14.125, + ], + "Ti2+": [ + 7.040119, + 1.496285, + 9.657304, + 0.006534, + 1.649561, + 0.150362, + 0.537072, + 0.031914, + 8.009958, + 201.800293, + 24.039, + ], + "Ti3+": [ + 36.587933, + 7.230255, + -9.086077, + 2.084594, + 17.294008, + -35.111282, + 0.000681, + 0.522262, + 5.262317, + 15.881716, + 6.149, + ], + "Ti4+": [ + 45.355537, + 7.092900, + 7.483858, + -43.498817, + 1.678915, + -0.110628, + 9.252186, + 0.523046, + 13.082852, + 10.193876, + 0.023, + ], + "V2+": [ + 7.754356, + 2.064100, + 2.576998, + 2.011404, + 7.126177, + -0.533379, + 7.066315, + 0.014993, + 7.066308, + 22.055786, + 0.467, + ], + "V3+": [ + 9.958480, + 1.596350, + 1.483442, + -10.846044, + 17.332867, + 0.474921, + 6.763041, + 0.056895, + 17.750029, + 0.328826, + 0.388, + ], + "V5+": [ + 15.575018, + 8.448095, + 1.612040, + -9.721855, + 1.534029, + 0.552676, + 0.682708, + 5.566640, + 10.527077, + 0.907961, + 0.066, + ], + "Cr2+": [ + 10.598877, + 1.565858, + 2.728280, + 0.098064, + 6.959321, + 0.049870, + 6.151846, + 0.023519, + 17.432816, + 54.002388, + 0.426, + ], + "Cr3+": [ + 7.989310, + 1.765079, + 2.627125, + 1.829380, + 6.980908, + -0.192123, + 6.068867, + 0.018342, + 6.068887, + 16.309284, + 0.420, + ], + "Mn2+": [ + 11.287712, + 26.042414, + 3.058096, + 0.090258, + 7.088306, + -24.566132, + 5.506225, + 0.000774, + 16.158575, + 54.766354, + 0.375, + ], + "Mn3+": [ + 6.926972, + 2.081342, + 11.128379, + 2.375107, + -0.419287, + -0.093713, + 0.378315, + 0.015054, + 5.379957, + 14.429586, + 0.004, + ], + "Mn4+": [ + 12.409131, + 7.466993, + 1.809947, + -12.138477, + 10.780248, + 0.672146, + 0.300400, + 0.112814, + 12.520756, + 0.168653, + 5.173, + ], + "Fe2+": [ + 11.776765, + 11.165097, + 3.533495, + 0.165345, + 7.036932, + -9.676919, + 4.912232, + 0.001748, + 14.166556, + 42.381958, + 0.341, + ], + "Fe3+": [ + 9.721638, + 63.403847, + 2.141347, + 2.629274, + 7.033846, + -61.930725, + 4.869297, + 0.000293, + 4.867602, + 13.539076, + 0.338, + ], + "Co2+": [ + 6.993840, + 26.285812, + 12.254289, + 0.246114, + 4.017407, + -24.796852, + 0.310779, + 0.000684, + 4.400528, + 35.741447, + 12.536, + ], + "Co3+": [ + 6.861739, + 2.678570, + 12.281889, + 3.501741, + -0.179384, + -1.147345, + 0.309794, + 0.008142, + 4.331703, + 11.914167, + 11.914, + ], + "Ni2+": [ + 12.519017, + 37.832058, + 4.387257, + 0.661552, + 6.949072, + -36.344471, + 3.933053, + 0.000442, + 10.449184, + 23.860998, + 0.283, + ], + "Ni3+": [ + 13.579366, + 1.902844, + 12.859268, + 3.811005, + -6.838595, + -0.317618, + 0.313140, + 0.012621, + 3.906407, + 10.894311, + 0.344, + ], + "Cu1+": [ + 12.960763, + 16.342150, + 1.110102, + 5.520682, + 6.915452, + -14.849320, + 3.576010, + 0.000975, + 29.523218, + 10.114283, + 0.261, + ], + "Cu2+": [ + 11.895569, + 16.344978, + 5.799817, + 1.048804, + 6.789088, + -14.878383, + 3.378519, + 0.000924, + 8.133653, + 20.526524, + 0.254, + ], + "Zn2+": [ + 13.340772, + 10.428857, + 5.544489, + 0.762295, + 6.869172, + -8.945248, + 3.215913, + 0.001413, + 8.542680, + 21.891756, + 0.239, + ], + "Ga3+": [ + 13.123875, + 35.288189, + 6.126979, + 0.611551, + 6.724807, + -33.875122, + 2.809960, + 0.000323, + 6.831534, + 16.784311, + 0.212, + ], + "Ge4+": [ + 6.876636, + 6.779091, + 9.969591, + 3.135857, + 0.152389, + 1.08654, + 2.025174, + 0.176650, + 3.573822, + 7.685848, + 16.677, + ], + "Br1-": [ + 17.714310, + 6.466926, + 6.947385, + 4.402674, + -0.697279, + 1.152674, + 2.122554, + 19.050768, + 0.152708, + 58.690361, + 58.690, + ], + "Rb1+": [ + 17.684320, + 7.761588, + 6.680874, + 2.668883, + 0.070974, + 1.133263, + 1.710209, + 14.919863, + 0.128542, + 31.654478, + 0.128, + ], + "Sr2+": [ + 17.694973, + 1.275762, + 6.154252, + 9.234786, + 0.515995, + 1.125309, + 1.550888, + 30.133041, + 0.118774, + 13.821799, + 0.118, + ], + "Y3+": [ + 46.660366, + 10.369686, + 4.623042, + -62.170834, + 17.471146, + 19.023842, + -0.019971, + 13.180257, + 0.176398, + -0.016727, + 1.467, + ], + "Zr4+": [ + 6.802956, + 17.699253, + 10.650647, + -0.248108, + 0.250338, + 0.827902, + 0.096228, + 1.296127, + 11.240715, + -0.219259, + -0.219, + ], + "Nb3+": [ + 17.714323, + 1.675213, + 7.483963, + 8.322464, + 11.143573, + -8.339573, + 1.172419, + 30.102791, + 0.080255, + -0.002983, + 10.456, + ], + "Nb5+": [ + 17.580206, + 7.633277, + 10.793497, + 0.180884, + 67.837921, + -68.024780, + 1.165852, + 0.078558, + 9.507652, + 31.621656, + -0.000, + ], + "Mo3+": [ + 7.447050, + 17.778122, + 11.886068, + 1.997905, + 1.789626, + -1.898764, + 0.072000, + 1.073145, + 9.834720, + 28.221746, + -0.011, + ], + "Mo5+": [ + 7.929879, + 17.667669, + 11.515987, + 0.500402, + 77.444084, + -78.056595, + 0.068856, + 1.068064, + 9.046229, + 26.558945, + -0.000, + ], + "Mo6+": [ + 34.757683, + 9.653037, + 6.584769, + -18.628115, + 2.490594, + 1.141916, + 1.301770, + 7.123843, + 0.094097, + 1.617443, + 12.335, + ], + "Ru3+": [ + 17.894758, + 13.579529, + 10.729251, + 2.474095, + 48.227997, + -51.905243, + 0.902827, + 8.740579, + 0.045125, + 24.764954, + -0.001, + ], + "Ru4+": [ + 17.845776, + 13.455084, + 10.229087, + 1.653524, + 14.059795, + -17.241762, + 0.901070, + 8.482392, + 0.045972, + 23.015272, + -0.004, + ], + "Rh3+": [ + 17.758621, + 14.569813, + 5.298320, + 2.533579, + 0.879753, + 0.960843, + 0.841779, + 8.319533, + 0.069050, + 23.709131, + 0.069, + ], + "Rh4+": [ + 17.716188, + 14.446654, + 5.185801, + 1.703448, + 0.989992, + 0.959941, + 0.840572, + 8.100647, + 0.068995, + 22.357307, + 0.068, + ], + "Pd2+": [ + 6.122282, + 15.651012, + 3.513508, + 9.060790, + 8.771199, + 0.879336, + 0.062424, + 8.018296, + 24.784275, + 0.776457, + 0.776, + ], + "Pd4+": [ + 6.152421, + -96.069023, + -31.622141, + -81.578255, + -17.801403, + -0.915874, + -0.063951, + -11.090354, + -13.466152, + -9.758302, + -0.783, + ], + "Ag1+": [ + 6.091192, + 4.019526, + 16.948174, + 4.258638, + 13.889437, + 0.785127, + 0.056305, + 0.719340, + 7.758938, + 27.368349, + 0.719, + ], + "Ag2+": [ + 6.401808, + 48.699802, + 4.799859, + -32.332523, + 16.356710, + 1.068247, + 0.068167, + 0.942270, + 20.639496, + 1.100365, + 6.883, + ], + "Cd2+": [ + 6.093711, + 43.909691, + 17.041306, + -39.675117, + 17.958918, + 0.664795, + 0.050624, + 8.654143, + 15.621396, + 11.082067, + 0.667, + ], + "In3+": [ + 6.206277, + 18.497746, + 3.078131, + 10.524613, + 7.401234, + 0.293677, + 0.041357, + 6.605563, + 18.792250, + 0.608082, + 0.608, + ], + "Sn2+": [ + 6.353672, + 4.770377, + 14.672025, + 4.235959, + 18.002131, + -0.042519, + 0.034720, + 6.167891, + 6.167879, + 29.006456, + 0.561, + ], + "Sn4+": [ + 15.445732, + 6.420892, + 4.562980, + 1.713385, + 18.033537, + -0.172219, + 6.280898, + 0.033144, + 6.280899, + 17.983601, + 0.557, + ], + "Sb3+": [ + 10.189171, + 57.461918, + 19.356573, + 4.862206, + -45.394096, + 1.516108, + 0.089485, + 0.375256, + 5.357987, + 22.153736, + 0.297, + ], + "Sb5+": [ + 17.920622, + 6.647932, + 12.724075, + 1.555545, + 7.600591, + -0.445371, + 0.522315, + 0.029487, + 5.718210, + 16.433775, + 5.718, + ], + "I1-": [ + 20.010330, + 17.835524, + 8.104130, + 2.231118, + 9.158548, + -3.341004, + 4.565931, + 0.444266, + 32.430672, + 95.149040, + 0.014, + ], + "Cs1+": [ + 19.939056, + 24.967621, + 10.375884, + 0.454243, + 17.660248, + -19.394306, + 3.770511, + 0.004040, + 25.311275, + 76.537766, + 0.384, + ], + "Ba2+": [ + 19.750200, + 17.513683, + 10.884892, + 0.321585, + 65.149834, + -59.618172, + 3.430748, + 0.361590, + 21.358307, + 70.309402, + 0.001, + ], + "La3+": [ + 19.688887, + 17.345703, + 11.356296, + 0.099418, + 82.358124, + -76.846909, + 3.146211, + 0.339586, + 18.753832, + 90.345459, + 0.001, + ], + "Ce3+": [ + 26.593231, + 85.866432, + -6.677695, + 12.111847, + 17.401903, + -80.313423, + 3.280381, + 0.001012, + 4.313575, + 17.868504, + 0.326, + ], + "Ce4+": [ + 17.457533, + 25.659941, + 11.691037, + 19.695251, + -16.994749, + -3.515096, + 0.311812, + -0.003793, + 16.568687, + 2.886395, + -0.008, + ], + "Pr3+": [ + 20.879841, + 36.035797, + 12.135341, + 0.283103, + 17.167803, + -30.500784, + 2.870897, + 0.002364, + 16.615236, + 53.909359, + 0.306, + ], + "Pr4+": [ + 17.496082, + 21.538509, + 20.403114, + 12.062211, + -7.492043, + -9.016722, + 0.294457, + -0.002742, + 2.772886, + 15.804613, + -0.013, + ], + "Nd3+": [ + 17.120077, + 56.038139, + 21.468307, + 10.000671, + 2.905866, + -50.541992, + 0.291295, + 0.001421, + 2.743681, + 14.581367, + 22.485, + ], + "Pm3+": [ + 22.221066, + 17.068142, + 12.805423, + 0.435687, + 52.238770, + -46.767181, + 2.635767, + 0.277039, + 14.927315, + 45.768017, + 0.001, + ], + "Sm3+": [ + 15.618565, + 19.538092, + 13.398946, + -4.358811, + 24.490461, + -9.714854, + 0.006001, + 0.306379, + 14.979594, + 0.748825, + 2.454, + ], + "Eu2+": [ + 23.899035, + 31.657497, + 12.955752, + 1.700576, + 16.992199, + -26.204315, + 2.467332, + 0.002230, + 13.625002, + 35.089481, + 0.253, + ], + "Eu3+": [ + 17.758327, + 33.498665, + 24.067188, + 13.436883, + -9.019134, + -19.768026, + 0.244474, + -0.003901, + 2.487526, + 14.568011, + -0.015, + ], + "Gd3+": [ + 24.344999, + 16.945311, + 13.866931, + 0.481674, + 93.506378, + -88.147179, + 2.333971, + 0.239215, + 12.982995, + 43.876347, + 0.000, + ], + "Tb3+": [ + 24.878252, + 16.856016, + 13.663937, + 1.279671, + 39.271294, + -33.950317, + 2.223301, + 0.227290, + 11.812528, + 29.910065, + 0.001, + ], + "Dy3+": [ + 16.864344, + 90.383461, + 13.675473, + 1.687078, + 25.540651, + -85.150650, + 0.216275, + 0.000593, + 11.121207, + 26.250975, + 2.135, + ], + "Ho3+": [ + 16.837524, + 63.221336, + 13.703766, + 2.061602, + 26.202621, + -58.026505, + 0.206873, + 0.000796, + 10.500283, + 24.031883, + 2.055, + ], + "Er3+": [ + 16.810127, + 22.681061, + 13.864114, + 2.294506, + 26.864477, + -17.513460, + 0.198293, + 0.002126, + 9.973341, + 22.836388, + 1.979, + ], + "Tm3+": [ + 16.787500, + 15.350905, + 14.182357, + 2.299111, + 27.573771, + -10.192087, + 0.190852, + 0.003036, + 9.602934, + 22.526880, + 1.912, + ], + "Yb2+": [ + 28.443794, + 16.849527, + 14.165081, + 3.445311, + 28.308853, + -23.214935, + 1.863896, + 0.183811, + 9.225469, + 23.691355, + 0.001, + ], + "Yb3+": [ + 28.191629, + 16.828087, + 14.167848, + 2.744962, + 23.171774, + -18.103676, + 1.842889, + 0.182788, + 9.045957, + 20.799847, + 0.001, + ], + "Lu3+": [ + 28.828693, + 16.823227, + 14.247617, + 3.079559, + 25.647667, + -20.626528, + 1.776641, + 0.175560, + 8.575531, + 19.693701, + 0.001, + ], + "Hf4+": [ + 29.267378, + 16.792543, + 14.785310, + 2.184128, + 23.791996, + -18.820383, + 1.697911, + 0.168313, + 8.190025, + 18.277578, + 0.001, + ], + "Ta5+": [ + 29.539469, + 16.741854, + 15.182070, + 1.642916, + 16.437447, + -11.542459, + 1.612934, + 0.160460, + 7.654408, + 17.070732, + 0.001, + ], + "W6+": [ + 29.729357, + 17.247808, + 15.184488, + 1.154652, + 0.739335, + 3.945157, + 1.501648, + 0.140803, + 6.880573, + 14.299601, + 14.299, + ], + "Os4+": [ + 17.113485, + 15.792370, + 23.342392, + 4.090271, + 7.671292, + 3.988390, + 0.131850, + 7.288542, + 1.389307, + 19.629425, + 1.389, + ], + "Ir3+": [ + 31.537575, + 16.363338, + 15.597141, + 5.051404, + 1.436935, + 4.009459, + 1.334144, + 7.451918, + 0.127514, + 21.705648, + 0.127, + ], + "Ir4+": [ + 30.391249, + 16.146996, + 17.019068, + 4.458904, + 0.975372, + 4.006865, + 1.328519, + 7.181766, + 0.127337, + 19.060146, + 1.328, + ], + "Pt2+": [ + 31.986849, + 17.249048, + 15.269374, + 5.760234, + 1.694079, + 4.032512, + 1.281143, + 7.625512, + 0.123571, + 24.190826, + 0.123, + ], + "Pt4+": [ + 41.932713, + 16.339224, + 17.653894, + 6.012420, + -12.036877, + 4.094551, + 1.111409, + 6.466086, + 0.128917, + 16.954155, + 0.778, + ], + "Au1+": [ + 32.124306, + 16.716476, + 16.814100, + 7.311565, + 0.993064, + 4.040792, + 1.216073, + 7.165378, + 0.118715, + 20.442486, + 53.095, + ], + "Au3+": [ + 31.704271, + 17.545767, + 16.819551, + 5.522640, + 0.361725, + 4.042679, + 1.215561, + 7.220506, + 0.118812, + 20.050970, + 1.215, + ], + "Hg1+": [ + 28.866837, + 19.277540, + 16.776051, + 6.281459, + 3.710289, + 4.068430, + 1.173967, + 7.583842, + 0.115351, + 29.055994, + 1.173, + ], + "Hg2+": [ + 32.411079, + 18.690371, + 16.711773, + 9.974835, + -3.847611, + 4.052869, + 1.162980, + 7.329806, + 0.114518, + 22.009489, + 22.009, + ], + "Tl1+": [ + 32.295044, + 16.570049, + 17.991013, + 1.535355, + 7.554591, + 4.054030, + 1.101544, + 0.110020, + 6.528559, + 52.495068, + 20.338, + ], + "Tl3+": [ + 32.525639, + 19.139185, + 17.100321, + 5.891115, + 12.599463, + -9.256075, + 1.094966, + 6.900992, + 0.103667, + 18.489614, + -0.001, + ], + "Pb2+": [ + 27.392647, + 16.496822, + 19.984501, + 6.813923, + 5.233910, + 4.065623, + 1.058874, + 0.106305, + 6.708123, + 24.395554, + 1.058, + ], + "Pb4+": [ + 32.505657, + 20.014240, + 14.645661, + 5.029499, + 1.760138, + 4.044678, + 1.047035, + 6.670321, + 0.105279, + 16.525040, + 0.105, + ], + "Bi3+": [ + 32.461437, + 19.438683, + 16.302486, + 7.322662, + 0.431704, + 4.043703, + 0.997930, + 6.038867, + 0.101338, + 18.371586, + 46.361, + ], + "Bi5+": [ + 16.734028, + 20.580494, + 9.452623, + 61.155834, + -34.041023, + 4.113663, + 0.105076, + 4.773282, + 11.762162, + 1.211775, + 1.619, + ], + "Ra2+": [ + 4.986228, + 32.474945, + 21.947443, + 11.800013, + 10.807292, + 3.956572, + 0.082597, + 0.791468, + 4.608034, + 24.792431, + 0.082, + ], + "Ac3+": [ + 15.584983, + 32.022125, + 21.456327, + 0.757593, + 12.341252, + 3.838984, + 0.077438, + 0.739963, + 4.040735, + 47.525002, + 19.406, + ], + "Th4+": [ + 15.515445, + 32.090691, + 13.996399, + 12.918157, + 7.635514, + 3.831122, + 0.074499, + 0.711663, + 3.871044, + 18.596891, + 3.871, + ], + "U3+": [ + 15.360309, + 32.395657, + 21.961290, + 1.325894, + 14.251453, + 3.706622, + 0.067815, + 0.654643, + 3.643409, + 39.604965, + 16.330, + ], + "U4+": [ + 15.355091, + 32.235306, + 0.557745, + 14.396367, + 21.751173, + 3.705863, + 0.067789, + 0.652613, + 42.354237, + 15.908239, + 3.553, + ], + "U6+": [ + 15.333844, + 31.770849, + 21.274414, + 13.872636, + 0.048519, + 3.700591, + 0.067644, + 0.646384, + 3.317894, + 14.650250, + 75.339, + ], + "Np3+": [ + 15.378152, + 32.572132, + 22.206125, + 1.413295, + 14.828381, + 3.603370, + 0.064613, + 0.631420, + 3.561936, + 37.875511, + 15.546, + ], + "Np4+": [ + 15.373926, + 32.423019, + 21.969994, + 0.662078, + 14.969350, + 3.603039, + 0.064597, + 0.629658, + 3.476389, + 39.438942, + 15.135, + ], + "Np6+": [ + 15.359986, + 31.992825, + 21.412458, + 0.066574, + 14.568174, + 3.600942, + 0.064528, + 0.624505, + 3.253441, + 67.658318, + 13.980, + ], + "Pu3+": [ + 15.356004, + 32.769127, + 22.680210, + 1.351055, + 15.416232, + 3.428895, + 0.060590, + 0.604663, + 3.491509, + 37.260635, + 14.981, + ], + "Pu4+": [ + 15.416219, + 32.610569, + 22.256662, + 0.719495, + 15.518152, + 3.480408, + 0.061456, + 0.607938, + 3.411848, + 37.628792, + 14.464, + ], + "Pu6+": [ + 15.436506, + 32.289719, + 14.726737, + 15.012391, + 7.024677, + 3.502325, + 0.061815, + 0.606541, + 3.245363, + 13.616438, + 3.245, + ], +} +# Parametrization of incoherently scattered X-ray intensities vs sin(theta)/lambda. +# +# This file contains the tabulated coefficients for calculation +# of Compton Cross Section as a function of sin(theta)/lambda, being +# theta=scattering angle, and lambda=photon wavelength. +# REFERENCE: +# Analytic Approximations to Incoherently Scattered X-Ray Intensities +# by H.H.M. Balyuzi (Acta Cryst. (1975). A31, 600 +# +# This is the abstract from the mentioned paper: +# The theoretically calculated incoherently scattered X-ray intensities of +# Cromer & Mann [j. Chem. Phys. (1967). 47, 1892-1893] and Cromer [J. Chem. +# Phys. (1969). 50, 4857-4859] for the elements 2 to 95 and 102 have been +# fitted to analytic function. The coefficients of the fit are tabulated +# and the accurance of the fitting is discussed. The accuracy is very good +# for sin(theta)/Lambda<=1.4 A^(-1) +# +# The analytical function is: +# Compton[s] = Z-[SUM a_i*EXP(-b_i*(s^2)) ] +# i=1,5 +# +# where s = sin(theta)/lambda, and a_i and b_i are the tabulated coefficients. +# Coefficients for elements Cm-Cf simply copied from those for Am +# Column description: Z a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 +COMPTON = { + "H": [ + 1.0, + 0.2623, + 0.5094, + 0.2034, + 0.0249, + 0.0000, + 32.3717, + 14.7084, + 6.6884, + 2.4843, + 0.0000, + ], + "He": [ + 2.0, + 0.5246, + 1.0188, + 0.4068, + 0.0498, + 0.0000, + 32.3717, + 14.7084, + 6.6884, + 2.4843, + 0.0000, + ], + "Li": [ + 3.0, + 0.0518, + 0.9578, + 0.7348, + 1.0817, + 0.1740, + 533.922, + 245.845, + 10.1831, + 4.4364, + 1.5031, + ], + "Be": [ + 4.0, + 0.4634, + 1.5592, + 0.7685, + 1.0623, + 0.1470, + 185.856, + 104.601, + 4.8589, + 2.1932, + 0.7641, + ], + "B": [ + 5.0, + 0.9046, + 1.9822, + 0.2279, + 1.4873, + 0.3979, + 104.961, + 46.0191, + 8.9873, + 1.9674, + 0.6778, + ], + "C": [ + 6.0, + 0.7568, + 2.5511, + 0.7051, + 1.4605, + 0.5263, + 82.2385, + 31.7282, + 11.9471, + 1.4637, + 0.5150, + ], + "N": [ + 7.0, + 0.9070, + 2.8972, + 1.1659, + 1.5526, + 0.4769, + 64.1555, + 20.8507, + 7.7576, + 1.0335, + 0.3516, + ], + "O": [ + 8.0, + 0.8847, + 3.2189, + 1.7990, + 1.5538, + 0.5434, + 52.0063, + 16.4487, + 6.5958, + 0.8143, + 0.2815, + ], + "F": [ + 9.0, + 0.9756, + 3.5101, + 2.3561, + 1.5896, + 0.5683, + 41.7194, + 12.7747, + 5.2945, + 0.6470, + 0.2254, + ], + "Ne": [ + 10.0, + 1.1544, + 3.8033, + 2.8085, + 1.6647, + 0.5687, + 34.2567, + 9.76720, + 4.0375, + 0.5256, + 0.1800, + ], + "Na": [ + 11.0, + 1.0243, + 2.0704, + 5.3197, + 1.5214, + 1.0637, + 293.411, + 15.2373, + 4.4697, + 0.6246, + 0.1922, + ], + "Mg": [ + 12.0, + 2.0049, + 1.9449, + 5.4291, + 1.6315, + 0.9888, + 178.983, + 11.2433, + 3.4272, + 0.4907, + 0.1542, + ], + "Al": [ + 13.0, + 2.6790, + 1.2336, + 5.9358, + 1.6622, + 1.4835, + 121.363, + 16.0728, + 3.2632, + 0.6616, + 0.1586, + ], + "Si": [ + 14.0, + 2.1006, + 2.2025, + 5.3063, + 2.5162, + 1.8716, + 116.957, + 34.7760, + 3.3215, + 0.9933, + 0.1553, + ], + "P": [ + 15.0, + 1.8936, + 3.3782, + 5.3752, + 2.4942, + 1.8564, + 108.033, + 26.6586, + 2.6865, + 0.7973, + 0.1333, + ], + "S": [ + 16.0, + 2.0717, + 4.2023, + 5.6883, + 2.2623, + 1.7735, + 86.7211, + 21.4574, + 2.1255, + 0.5882, + 0.1128, + ], + "Cl": [ + 17.0, + 2.1221, + 5.0905, + 5.6885, + 2.2809, + 1.8164, + 73.8395, + 17.9756, + 1.8037, + 0.5162, + 0.1008, + ], + "Ar": [ + 18.0, + 2.1778, + 5.9791, + 5.6104, + 2.3442, + 1.8873, + 65.6187, + 14.4380, + 1.5611, + 0.4716, + 0.0914, + ], + "K": [ + 19.0, + 1.0863, + 2.8562, + 5.6616, + 6.7809, + 2.6145, + 425.474, + 35.7249, + 9.3261, + 1.0206, + 0.1036, + ], + "Ca": [ + 20.0, + 2.0554, + 2.7251, + 5.9104, + 6.7171, + 2.5916, + 289.862, + 28.7190, + 7.4788, + 0.8644, + 0.0920, + ], + "Sc": [ + 21.0, + 2.1608, + 2.9545, + 6.5125, + 6.7745, + 2.5969, + 251.387, + 26.8528, + 6.4238, + 0.7616, + 0.0831, + ], + "Ti": [ + 22.0, + 2.1983, + 3.2282, + 7.0649, + 6.8832, + 2.6243, + 226.968, + 24.9306, + 5.6213, + 0.6865, + 0.0758, + ], + "V": [ + 23.0, + 2.2399, + 3.4348, + 7.6412, + 7.0270, + 2.6558, + 206.399, + 22.9026, + 4.9366, + 0.6256, + 0.0697, + ], + "Cr": [ + 24.0, + 1.5893, + 3.6692, + 8.7249, + 7.2913, + 2.7226, + 196.584, + 25.2663, + 4.5848, + 0.5876, + 0.0650, + ], + "Mn": [ + 25.0, + 2.3156, + 3.7420, + 8.8241, + 7.3811, + 2.7355, + 174.656, + 19.5879, + 3.8896, + 0.5326, + 0.0597, + ], + "Fe": [ + 26.0, + 2.3141, + 3.9729, + 9.2624, + 7.5083, + 2.9404, + 164.104, + 18.2898, + 3.5861, + 0.5155, + 0.0597, + ], + "Co": [ + 27.0, + 2.3636, + 4.4188, + 9.7350, + 7.6872, + 2.7927, + 151.337, + 16.0770, + 3.1445, + 0.4553, + 0.0514, + ], + "Ni": [ + 28.0, + 2.4174, + 4.7076, + 10.2289, + 7.8357, + 2.8071, + 139.963, + 14.5797, + 2.8142, + 0.4203, + 0.0476, + ], + "Cu": [ + 29.0, + 1.7532, + 4.8167, + 11.2836, + 8.2460, + 2.8943, + 127.251, + 16.9194, + 2.7458, + 0.4076, + 0.0454, + ], + "Zn": [ + 30.0, + 2.4474, + 5.1080, + 11.4407, + 8.1791, + 2.8211, + 125.083, + 12.8443, + 2.3122, + 0.3605, + 0.0410, + ], + "Ga": [ + 31.0, + 3.0360, + 5.1760, + 11.6692, + 8.2940, + 2.8148, + 104.577, + 11.2803, + 2.0663, + 0.3314, + 0.0380, + ], + "Ge": [ + 32.0, + 3.4795, + 5.2306, + 11.9324, + 8.5063, + 2.8388, + 87.5304, + 10.8491, + 1.9060, + 0.3107, + 0.0356, + ], + "As": [ + 33.0, + 3.3385, + 5.6229, + 12.2449, + 8.8668, + 2.9138, + 82.4879, + 12.0723, + 1.8317, + 0.2996, + 0.0341, + ], + "Se": [ + 34.0, + 3.5333, + 5.9644, + 12.4403, + 9.1212, + 2.9289, + 73.4400, + 12.2369, + 1.7151, + 0.2824, + 0.0318, + ], + "Br": [ + 35.0, + 3.4898, + 6.5641, + 12.5318, + 9.3877, + 3.0170, + 68.5438, + 12.5940, + 1.6235, + 0.2712, + 0.0308, + ], + "Kr": [ + 36.0, + 3.0598, + 7.6671, + 12.5852, + 9.6168, + 3.0647, + 70.8068, + 12.6449, + 1.5230, + 0.2577, + 0.0294, + ], + "Rb": [ + 37.0, + 2.3770, + 8.6605, + 12.5729, + 10.1507, + 3.2083, + 178.867, + 13.9200, + 1.5224, + 0.2567, + 0.0289, + ], + "Sr": [ + 38.0, + 3.0740, + 8.8344, + 12.5145, + 10.3129, + 3.2433, + 210.803, + 12.3784, + 1.4148, + 0.2424, + 0.0275, + ], + "Y": [ + 39.0, + 3.5086, + 9.2574, + 12.4297, + 10.4962, + 3.2840, + 177.423, + 11.0509, + 1.3242, + 0.2300, + 0.0263, + ], + "Zr": [ + 40.0, + 3.8436, + 9.6980, + 12.3352, + 10.7459, + 3.3493, + 152.274, + 10.0161, + 1.2610, + 0.2206, + 0.0254, + ], + "Nb": [ + 41.0, + 3.7519, + 10.5738, + 12.2251, + 10.9745, + 3.4425, + 117.449, + 8.9975, + 1.2044, + 0.2127, + 0.0248, + ], + "Mo": [ + 42.0, + 3.9567, + 11.1228, + 12.1674, + 11.2328, + 3.4857, + 105.180, + 8.0754, + 1.1551, + 0.2038, + 0.0237, + ], + "Tc": [ + 43.0, + 4.3317, + 10.7065, + 12.1316, + 12.0687, + 3.7296, + 115.939, + 7.9151, + 1.2769, + 0.2105, + 0.0240, + ], + "Ru": [ + 44.0, + 4.7308, + 12.0616, + 11.9367, + 11.6021, + 3.6225, + 77.6118, + 6.4667, + 1.0431, + 0.1877, + 0.0223, + ], + "Rh": [ + 45.0, + 4.8745, + 12.2804, + 12.0133, + 12.0245, + 3.7592, + 71.5772, + 6.1701, + 1.0589, + 0.1853, + 0.0220, + ], + "Pd": [ + 46.0, + 5.4847, + 13.7150, + 11.6608, + 11.4709, + 3.6545, + 53.2508, + 4.9329, + 0.8575, + 0.1655, + 0.0206, + ], + "Ag": [ + 47.0, + 5.3490, + 13.4127, + 11.9402, + 12.3201, + 3.9205, + 58.9663, + 5.0548, + 0.9684, + 0.1715, + 0.0210, + ], + "Cd": [ + 48.0, + 4.5224, + 9.6282, + 14.9509, + 14.2066, + 4.6563, + 87.3897, + 7.7119, + 1.5820, + 0.2036, + 0.0234, + ], + "In": [ + 49.0, + 4.7031, + 8.2361, + 16.4206, + 14.6608, + 4.9493, + 89.2096, + 8.9965, + 1.7229, + 0.2062, + 0.0238, + ], + "Sn": [ + 50.0, + 4.9677, + 7.4873, + 17.4268, + 14.9229, + 5.1678, + 83.2133, + 10.1130, + 1.7605, + 0.2042, + 0.0237, + ], + "Sb": [ + 51.0, + 4.6001, + 7.4399, + 18.3475, + 15.1777, + 5.4096, + 82.5070, + 12.5902, + 1.7906, + 0.2029, + 0.0238, + ], + "Te": [ + 52.0, + 4.5671, + 7.7178, + 18.8338, + 15.2844, + 5.5769, + 79.7245, + 13.8028, + 1.7411, + 0.1976, + 0.0235, + ], + "I": [ + 53.0, + 4.3147, + 8.3728, + 19.1961, + 15.3645, + 5.7365, + 78.6996, + 14.9421, + 1.6795, + 0.1921, + 0.0232, + ], + "Xe": [ + 54.0, + 3.4467, + 19.4724, + 9.7473, + 15.4210, + 5.9034, + 88.3050, + 1.6131, + 16.1669, + 0.1869, + 0.0229, + ], + "Cs": [ + 55.0, + 2.5751, + 19.7181, + 11.0138, + 15.5312, + 6.1374, + 224.598, + 1.5722, + 17.7908, + 0.1845, + 0.0229, + ], + "Ba": [ + 56.0, + 3.2477, + 19.7824, + 11.2142, + 15.4790, + 6.2602, + 266.593, + 1.4758, + 16.2710, + 0.1775, + 0.0225, + ], + "La": [ + 57.0, + 3.6683, + 11.7149, + 19.8077, + 15.4015, + 6.3860, + 224.726, + 14.7472, + 1.3823, + 0.1708, + 0.0222, + ], + "Ce": [ + 58.0, + 3.7218, + 12.0076, + 20.1925, + 15.4540, + 6.5996, + 212.566, + 14.0417, + 1.3272, + 0.1681, + 0.0221, + ], + "Pr": [ + 59.0, + 3.6287, + 11.9193, + 20.8823, + 15.6425, + 6.8971, + 208.103, + 13.8486, + 1.3025, + 0.1690, + 0.0222, + ], + "Nd": [ + 60.0, + 3.7229, + 12.0836, + 21.2664, + 15.7405, + 7.1521, + 194.998, + 13.2282, + 1.2573, + 0.1677, + 0.0222, + ], + "Pm": [ + 61.0, + 3.8009, + 12.2546, + 21.6281, + 15.8659, + 7.4126, + 184.340, + 12.6793, + 1.2139, + 0.1669, + 0.0222, + ], + "Sm": [ + 62.0, + 3.8533, + 12.3520, + 22.0136, + 16.0323, + 7.7082, + 176.392, + 12.2878, + 1.1810, + 0.1672, + 0.0223, + ], + "Eu": [ + 63.0, + 3.9234, + 12.4961, + 22.3133, + 16.2152, + 8.0085, + 167.816, + 11.8294, + 1.1433, + 0.1676, + 0.0224, + ], + "Gd": [ + 64.0, + 4.1100, + 13.0008, + 22.2962, + 16.2937, + 8.2594, + 160.859, + 11.0492, + 1.0914, + 0.1659, + 0.0223, + ], + "Tb": [ + 65.0, + 4.1589, + 13.2197, + 22.4627, + 16.5329, + 8.5842, + 155.186, + 10.6407, + 1.0667, + 0.1674, + 0.0224, + ], + "Dy": [ + 66.0, + 4.0415, + 13.1038, + 22.8132, + 17.0066, + 8.9849, + 150.058, + 10.6511, + 1.0708, + 0.1723, + 0.0227, + ], + "Ho": [ + 67.0, + 4.0620, + 13.2132, + 22.9351, + 17.3999, + 9.3388, + 145.976, + 10.3972, + 1.0569, + 0.1752, + 0.0228, + ], + "Er": [ + 68.0, + 4.0815, + 13.3282, + 22.9865, + 17.8548, + 9.6967, + 142.072, + 10.1525, + 1.0438, + 0.1785, + 0.0229, + ], + "Tm": [ + 69.0, + 4.7416, + 13.2875, + 23.1429, + 17.9215, + 9.8935, + 100.170, + 9.0676, + 0.9833, + 0.1753, + 0.0227, + ], + "Yb": [ + 70.0, + 4.1014, + 13.4586, + 22.9675, + 18.9998, + 10.4188, + 135.833, + 9.8125, + 1.0290, + 0.1860, + 0.0231, + ], + "Lu": [ + 71.0, + 4.3261, + 13.8638, + 22.6992, + 19.3649, + 10.6986, + 133.360, + 9.1664, + 0.9951, + 0.1861, + 0.0230, + ], + "Hf": [ + 72.0, + 4.5759, + 14.3292, + 22.3741, + 19.7027, + 10.9720, + 124.501, + 8.5195, + 0.9599, + 0.1857, + 0.0229, + ], + "Ta": [ + 73.0, + 4.7416, + 14.9284, + 22.0214, + 20.0290, + 11.2347, + 117.648, + 7.9070, + 0.9250, + 0.1850, + 0.0227, + ], + "W": [ + 74.0, + 4.8423, + 15.6421, + 21.6701, + 20.3207, + 11.4817, + 112.694, + 7.3551, + 0.8892, + 0.1837, + 0.0226, + ], + "Re": [ + 75.0, + 5.0015, + 16.3874, + 21.3263, + 20.5247, + 11.7163, + 106.001, + 6.7592, + 0.8491, + 0.1817, + 0.0224, + ], + "Os": [ + 76.0, + 5.3630, + 17.5066, + 23.3197, + 20.9425, + 8.8158, + 93.6155, + 6.0569, + 0.7156, + 0.1373, + 0.0127, + ], + "Ir": [ + 77.0, + 5.0953, + 15.4321, + 15.5924, + 26.5617, + 14.2784, + 98.2594, + 6.9463, + 1.2550, + 0.2600, + 0.0242, + ], + "Pt": [ + 78.0, + 5.6451, + 18.8015, + 20.6881, + 20.5266, + 12.2868, + 69.2677, + 5.3127, + 0.7107, + 0.1702, + 0.0216, + ], + "Au": [ + 79.0, + 5.8170, + 19.5635, + 20.3716, + 20.6837, + 12.5114, + 65.4079, + 4.9469, + 0.6809, + 0.1680, + 0.0214, + ], + "Hg": [ + 80.0, + 5.9389, + 19.4946, + 19.0547, + 22.4442, + 13.0069, + 74.0107, + 4.9118, + 0.7375, + 0.1779, + 0.0216, + ], + "Tl": [ + 81.0, + 6.5803, + 19.6010, + 18.3955, + 23.0433, + 13.3134, + 69.9997, + 4.6032, + 0.7312, + 0.1787, + 0.0216, + ], + "Pb": [ + 82.0, + 7.3754, + 19.7974, + 18.0002, + 23.2605, + 13.4943, + 62.4634, + 4.2561, + 0.7021, + 0.1757, + 0.0213, + ], + "Bi": [ + 83.0, + 8.2324, + 20.0183, + 17.6603, + 23.3246, + 13.6777, + 53.0479, + 3.9249, + 0.6675, + 0.1722, + 0.0210, + ], + "Po": [ + 84.0, + 9.0662, + 20.1395, + 23.6273, + 17.1872, + 13.8913, + 48.3272, + 3.6624, + 0.1701, + 0.6471, + 0.0208, + ], + "At": [ + 85.0, + 9.9223, + 20.2544, + 23.9015, + 16.7271, + 14.1028, + 43.7514, + 3.4229, + 0.1680, + 0.6271, + 0.0206, + ], + "Rn": [ + 86.0, + 10.7789, + 20.3926, + 16.3720, + 24.0637, + 14.2879, + 38.6121, + 3.2050, + 0.6037, + 0.1650, + 0.0203, + ], + "Fr": [ + 87.0, + 2.5332, + 11.5319, + 24.7459, + 31.9247, + 16.2475, + 269.878, + 21.9610, + 2.0716, + 0.2243, + 0.0223, + ], + "Ra": [ + 88.0, + 3.2249, + 11.6694, + 24.8687, + 31.8957, + 16.3306, + 321.663, + 20.3846, + 1.9730, + 0.2166, + 0.0219, + ], + "Ac": [ + 89.0, + 3.6207, + 12.1269, + 24.9363, + 31.8798, + 16.4227, + 270.774, + 18.9025, + 1.8811, + 0.2095, + 0.0215, + ], + "Th": [ + 90.0, + 4.0181, + 12.6119, + 24.9621, + 31.8646, + 16.5249, + 232.371, + 17.3825, + 1.7950, + 0.2030, + 0.0211, + ], + "Pa": [ + 91.0, + 3.7926, + 12.6626, + 25.8795, + 31.9403, + 16.7045, + 236.803, + 17.5908, + 1.7607, + 0.1984, + 0.0209, + ], + "U": [ + 92.0, + 3.9051, + 12.8415, + 26.4298, + 31.9514, + 16.8475, + 221.178, + 16.8737, + 1.7008, + 0.1932, + 0.0205, + ], + "Np": [ + 93.0, + 4.0333, + 12.9014, + 26.7571, + 31.4732, + 17.8065, + 207.727, + 16.3175, + 1.6677, + 0.1954, + 0.0220, + ], + "Pu": [ + 94.0, + 4.2695, + 12.5662, + 28.0362, + 31.9382, + 17.1487, + 185.955, + 15.5936, + 1.5914, + 0.1834, + 0.0200, + ], + "Am": [ + 95.0, + 4.3981, + 12.6808, + 28.6781, + 31.9085, + 17.2883, + 174.359, + 14.9676, + 1.5304, + 0.1786, + 0.0197, + ], + "Cm": [ + 96.0, + 4.3981, + 12.6808, + 28.6781, + 31.9085, + 17.2883, + 174.359, + 14.9676, + 1.5304, + 0.1786, + 0.0197, + ], + "Bk": [ + 97.0, + 4.3981, + 12.6808, + 28.6781, + 31.9085, + 17.2883, + 174.359, + 14.9676, + 1.5304, + 0.1786, + 0.0197, + ], + "Cf": [ + 98.0, + 4.3981, + 12.6808, + 28.6781, + 31.9085, + 17.2883, + 174.359, + 14.9676, + 1.5304, + 0.1786, + 0.0197, + ], +} + + +NEUTRON_SCATTERING_LENGTHS = {} diff --git a/src/xrpd_toolbox/fit_engine/lattice.py b/src/xrpd_toolbox/fit_engine/lattice.py new file mode 100644 index 0000000..e750037 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/lattice.py @@ -0,0 +1,285 @@ +import numpy as np + +from xrpd_toolbox.core import Parameter +from xrpd_toolbox.fit_engine.fitting_core import RefinementBaseModel + +MIN_POSSIBLE_LATTICE = ( + 0.53 # Single hydrogen atom is 0.53 angstroms so it can never be smaller than this +) + + +class LatticeParameter(Parameter): + bounds: list[float] = [MIN_POSSIBLE_LATTICE, np.inf] + + +class Lattice(RefinementBaseModel): + """This decribes the assymetric unit cell lattice - + a, b, c refer to the length of the unit cell in Angstrom + alpha, beta, gamma are the angles of the unit cell in degreee""" + + a: Parameter | float # in Angstrom + b: Parameter | float + c: Parameter | float + alpha: Parameter | float # in degrees + beta: Parameter | float # in degrees + gamma: Parameter | float # in degrees + + @property + def alpha_radians(self): + return np.deg2rad(self.alpha) + + @property + def beta_radians(self): + return np.deg2rad(self.beta) + + @property + def gamma_radians(self): + return np.deg2rad(self.gamma) + + @property + def matrix(self) -> np.ndarray: + """ + Returns 3x3 lattice matrix (fractional → Cartesian) + """ + a, b, c = self.a, self.b, self.c + alpha = self.alpha_radians + beta = self.beta_radians + gamma = self.gamma_radians + + # lattice vectors + a_vec = np.array([a, 0.0, 0.0]) + b_vec = np.array([b * np.cos(gamma), b * np.sin(gamma), 0.0]) + + cx = c * np.cos(beta) + cy = c * (np.cos(alpha) - np.cos(beta) * np.cos(gamma)) / np.sin(gamma) + cz = np.sqrt(max(c**2 - cx**2 - cy**2, 0.0)) + + c_vec = np.array([cx, cy, cz]) + + return np.vstack([a_vec, b_vec, c_vec]) + + +class TriclinicLattice(Lattice): + """This is the most general case of the lattice + where a, b, c and alpha, beta, gamma can be any value""" + + def __init__( + self, + a: float, + b: float, + c: float, + alpha: float, + beta: float, + gamma: float, + parameterise: bool = True, + **kwargs, + ): + a_param = LatticeParameter(value=a, refine=True) + b_param = LatticeParameter(value=b, refine=True) + c_param = LatticeParameter(value=c, refine=True) + + alpha_param = Parameter(value=alpha, refine=True) + beta_param = Parameter(value=beta, refine=True) + gamma_param = Parameter(value=gamma, refine=True) + + super().__init__( + a=a_param, + b=b_param, + c=c_param, + alpha=alpha_param, + beta=beta_param, + gamma=gamma_param, + ) + + +class MonoclinicLattice(Lattice): + """This is a special case of the lattice where alpha = gamma = 90""" + + def __init__( + self, + a: float, + b: float, + c: float, + beta: float, + parameterise: bool = True, + **kwargs, + ): + a_param = LatticeParameter(value=a, refine=True) + b_param = LatticeParameter(value=b, refine=True) + c_param = LatticeParameter(value=c, refine=True) + + beta_param = Parameter(value=beta, refine=True) + + # right_angle = Parameter(value=90, refine=False) + + super().__init__( + a=a_param, + b=b_param, + c=c_param, + alpha=90, + beta=beta_param, + gamma=90, + ) + + +class OrthorhombicLattice(Lattice): + """This is a special case of the lattice + where alpha = beta = gamma = 90""" + + def __init__( + self, a: float, b: float, c: float, parameterise: bool = True, **kwargs + ): + a_param = LatticeParameter(value=a, refine=True) + b_param = LatticeParameter(value=b, refine=True) + c_param = LatticeParameter(value=c, refine=True) + + # right_angle = Parameter(value=90, refine=False) + + super().__init__( + a=a_param, + b=b_param, + c=c_param, + alpha=90, + beta=90, + gamma=90, + ) + + +class TetragonalLattice(Lattice): + """This is a special case of the lattice + where a = b and alpha = beta = gamma = 90""" + + def __init__(self, a: float, c: float, parameterise: bool = True, **kwargs): + a_param = LatticeParameter(value=a, refine=True) + c_param = LatticeParameter(value=c, refine=True) + + # right_angle = Parameter(value=90, refine=False) + + super().__init__( + a=a_param, + b=a_param, + c=c_param, + alpha=90, + beta=90, + gamma=90, + ) + + +class TrigonalLattice(Lattice): + """This is a special case of the lattice + where a = b and alpha = beta = 90 and gamma = 120""" + + def __init__(self, a: float, c: float, parameterise: bool = True, **kwargs): + a_param = LatticeParameter(value=a, refine=True) + c_param = LatticeParameter(value=c, refine=True) + # right_angle = Parameter(value=90, refine=False) + # one_twenty_angle = Parameter(value=120, refine=False) + + super().__init__( + a=a_param, + b=a_param, + c=c_param, + alpha=90, + beta=90, + gamma=120, + ) + + +class HexagonalLattice(Lattice): + """This is a special case of the lattice + where a = b and gamma = 120 and alpha = beta = 90""" + + def __init__(self, a: float, c: float, parameterise: bool = True, **kwargs): + a_param = LatticeParameter(value=a, refine=True) + c_param = LatticeParameter(value=c, refine=True) + # right_angle = Parameter(value=90, refine=False) + # one_twenty_angle = Parameter(value=120, refine=False) + + super().__init__( + a=a_param, + b=a_param, + c=c_param, + alpha=90, + beta=90, + gamma=120, + ) + + +class RhombohedralLattice(Lattice): + """This is a special case of the lattice + where a = b = c and alpha = beta = gamma""" + + def __init__(self, a: float, alpha: float, parameterise: bool = True, **kwargs): + a_param = LatticeParameter(value=a, refine=True) + alpha_param = Parameter(value=alpha, refine=True) + + super().__init__( + a=a_param, + b=a_param, + c=a_param, + alpha=alpha_param, + beta=alpha_param, + gamma=alpha_param, + ) + + +class CubicLattice(Lattice): + def __init__(self, a: float, parameterise: bool = True, **kwargs): + a_param = LatticeParameter(value=a, refine=True) + + super().__init__( + a=a_param, + b=a_param, + c=a_param, + alpha=90, + beta=90, + gamma=90, + ) + + +def crystal_lattice_factory(crystal_class: str): + class_str = str(crystal_class).lower() + + if class_str == "cubic": + return CubicLattice + elif class_str == "hexagonal": + return HexagonalLattice + elif class_str == "monoclinic": + return MonoclinicLattice + elif class_str == "orthorhombic": + return OrthorhombicLattice + elif class_str == "rhombohedral": + return RhombohedralLattice + elif class_str == "tetragonal": + return TetragonalLattice + elif class_str == "trigonal": + return TrigonalLattice + elif class_str == "triclinic": + return TriclinicLattice + else: + raise ValueError(f"{crystal_class} unknown") + + +if __name__ == "__main__": + cl = CubicLattice(a=5) + # cl.parameterise() + + print(cl) + + params = cl.get_refinement_parameters() + + print(params) + + params["a"] = 5.5 + + cl.set_refinement_parameters(params) + + print(cl) + + model_dict = cl.model_dump() + + # print(cl.get_refinable_parameters()) + + cl2 = Lattice.model_validate(model_dict) + + print(cl2) diff --git a/src/xrpd_toolbox/fit_engine/peak_shape_functions.py b/src/xrpd_toolbox/fit_engine/peak_shape_functions.py new file mode 100644 index 0000000..714cc73 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/peak_shape_functions.py @@ -0,0 +1,382 @@ +from abc import abstractmethod +from typing import Annotated, Literal + +import numpy as np +from numba import njit +from pydantic import Field + +from xrpd_toolbox.core import Parameter +from xrpd_toolbox.fit_engine.fitting_core import RefinementBaseModel + + +def caglioti_fwhm( + two_theta: np.ndarray | float, # in degrees + u: float | int, + v: float | int, + w: float | int, +) -> np.ndarray: + """ + Compute FWHM using the Caglioti function. + + Parameters + ---------- + two_theta : float or array + 2θ in degrees + u, v, w : float + Caglioti parameters + + """ + theta = np.radians(two_theta / 2.0) + tan_theta = np.tan(theta) + + return np.sqrt(u * tan_theta**2 + v * tan_theta + w) + + +@njit +def extended_caglioti_fwhm( + two_theta: np.ndarray | float, + u: float, + v: float, + w: float, + x: float, + y: float, +) -> np.ndarray: + theta = np.radians(two_theta / 2.0) + tan_theta = np.tan(theta) + sec_theta = 1.0 / np.cos(theta) + + return np.sqrt( + u * tan_theta**2 + v * tan_theta + w + x * sec_theta + y * np.cos(theta) + ) + + +@njit +def lorentzian_fwhm( + two_theta: np.ndarray | float, + x: float, + y: float, +) -> np.ndarray: + theta = np.radians(two_theta / 2.0) + + return x / np.cos(theta) + y * np.tan(theta) + + +@njit +def tchz_fwhm( + two_theta: np.ndarray, + u: float, + v: float, + w: float, + x: float, + y: float, +): + hg = caglioti_fwhm(two_theta, u, v, w) + hl = lorentzian_fwhm(two_theta, x, y) + + return hg, hl + + +class IRF(RefinementBaseModel): + wdt: float | int = 5.0 # window for peak calculation. 5 = 5 * fwhm + + @abstractmethod + def calculate_peak_widths(self, peak_centres: np.ndarray): + raise NotImplementedError( + "calculate_peak_widths method must be implemented for subclasses" + ) + + @abstractmethod + def calculate_profile( + self, x: np.ndarray, peak_centres: np.ndarray, peak_intensities: np.ndarray + ) -> np.ndarray: + """Calculates the profile of peaks with the stored values, + and for the given peak_centres/intensities""" + raise NotImplementedError( + "calculate_profile method must be implemented for subclasses" + ) + + +class Cagloti(IRF): + irf_type: Literal["Cagloti"] = "Cagloti" + + u: float | Parameter = Field(default=Parameter(value=1)) + v: float | Parameter = Field(default=Parameter(value=1)) + w: float | Parameter = Field(default=Parameter(value=1)) + + def calculate(self, peak_centres: np.ndarray) -> np.ndarray: + return caglioti_fwhm( + two_theta=peak_centres, u=float(self.u), v=float(self.v), w=float(self.w) + ) + + +class ExtendedCaglioti(IRF): + irf_type: Literal["ExtendedCaglioti"] = "ExtendedCaglioti" + + u: float | Parameter = Field(default=Parameter(value=1e-4)) + v: float | Parameter = Field(default=Parameter(value=0)) + w: float | Parameter = Field(default=Parameter(value=1e-4)) + x: float | Parameter = Field(default=Parameter(value=1e-3)) + y: float | Parameter = Field(default=Parameter(value=0.0)) + + def calculate(self, peak_centres: np.ndarray) -> np.ndarray: + return extended_caglioti_fwhm( + peak_centres, + float(self.u), + float(self.v), + float(self.w), + float(self.x), + float(self.y), + ) + + +@njit +def tchz_combine_fwhm(hg, hl): + return ( + hg**5 + + 2.69269 * hg**4 * hl + + 2.42843 * hg**3 * hl**2 + + 4.47163 * hg**2 * hl**3 + + 0.07842 * hg * hl**4 + + hl**5 + ) ** (1 / 5) + + +@njit +def tchz_eta(hg, hl, h): + r = hl / h + return 1.36603 * r - 0.47719 * r**2 + 0.11116 * r**3 + + +# # TODO: Add modified pearson +# class ModifiedPearson(IRF): + + +class TCHZ(IRF): + """Thompson–Cox–Hastings pseudo-Voigt""" + + irf_type: Literal["TCHZ"] = "TCHZ" + + u: float | Parameter = Field(default=Parameter(value=0.002)) + v: float | Parameter = Field(default=Parameter(value=0.0, refine=False)) + w: float | Parameter = Field(default=Parameter(value=0.0006)) + x: float | Parameter = Field(default=Parameter(value=0.003)) + y: float | Parameter = Field(default=Parameter(value=0.01)) + + def calculate_peak_widths(self, peak_centres: np.ndarray): + hg = caglioti_fwhm( + peak_centres, + float(self.u), + float(self.v), + float(self.w), + ) + + hl = lorentzian_fwhm( + peak_centres, + float(self.x), + float(self.y), + ) + + fwhm = tchz_combine_fwhm(hg, hl) + eta = tchz_eta(hg, hl, fwhm) + + return fwhm, eta + + def calculate_shape(self, x: np.ndarray, centre: float, fwhm: float, eta: float): + sigma = fwhm / (2 * np.sqrt(2 * np.log(2))) + gamma = fwhm / 2.0 + + dx = x - centre + + gauss = np.exp(-(dx**2) / (2 * sigma**2)) + lorentz = gamma**2 / (dx**2 + gamma**2) + + return eta * lorentz + (1 - eta) * gauss + + def calculate_profile( + self, + x: np.ndarray, + peak_centres: np.ndarray, + peak_intensities: np.ndarray, + ) -> np.ndarray: + y = np.zeros_like(x, dtype=float) + + fwhm, eta = self.calculate_peak_widths(peak_centres) + + for i, centre in enumerate(peak_centres): + w = fwhm[i] + + start = np.searchsorted(x, centre - self.wdt * w) + end = np.searchsorted(x, centre + self.wdt * w, side="right") + + if end <= start: + continue + + xi = x[start:end] + + peak = self.calculate_shape( + xi, + centre, + w, + eta[i], + ) + + y[start:end] += peak_intensities[i] * peak + + return y + + +class ModifiedPearsonVII(IRF): + """Modified Pearson VII peak shape function""" + + irf_type: Literal["MPV"] = "MPV" + + u: float | Parameter = Field(default=Parameter(value=1)) # shape parameter m + v: float | Parameter = Field( + default=Parameter(value=-1e-1, refine=False) + ) # optional fixed offset + w: float | Parameter = Field( + default=Parameter(value=5e-3) + ) # instrument broadening term + + def calculate_peak_widths(self, peak_centres: np.ndarray): + # Replace with your own Caglioti/Lorentzian model if needed + # Here assumed to directly produce FWHM per peak centre + fwhm = caglioti_fwhm( + peak_centres, + float(self.u), + float(self.v), + float(self.w), + ) + return fwhm + + def calculate_shape(self, x: np.ndarray, centre: float, fwhm: float, m: float): + dx = x - centre + + # avoid invalid m values + m = max(float(m), 1e-6) + + denom = 2 * np.sqrt(2 ** (1.0 / m) - 1) + gamma = fwhm / denom + + return (1.0 + (dx**2) / (gamma**2)) ** (-m) + + def calculate_profile( + self, + x: np.ndarray, + peak_centres: np.ndarray, + peak_intensities: np.ndarray, + ) -> np.ndarray: + y = np.zeros_like(x, dtype=float) + + fwhm = self.calculate_peak_widths(peak_centres) + m = float(self.u) + + for i, centre in enumerate(peak_centres): + w = fwhm[i] + + start = np.searchsorted(x, centre - self.wdt * w) + end = np.searchsorted(x, centre + self.wdt * w, side="right") + + if end <= start: + continue + + xi = x[start:end] + + peak = self.calculate_shape( + xi, + centre, + w, + m, + ) + + y[start:end] += peak_intensities[i] * peak + + return y + + +class FCJPseudoVoigt(IRF): + """ + Finger–Cox–Jephcoat asymmetric pseudo-Voigt (practical approximation) + + Uses: + - pseudo-Voigt core + - exponential tailing asymmetry (axial divergence model) + """ + + irf_type: Literal["FCJ_PV"] = "FCJ_PV" + + u: float | Parameter = Field(default=Parameter(value=0.002)) + v: float | Parameter = Field(default=Parameter(value=0.0, refine=False)) + w: float | Parameter = Field(default=Parameter(value=0.0006)) + x: float | Parameter = Field(default=Parameter(value=0.003)) + y: float | Parameter = Field(default=Parameter(value=0.01)) + + a: float | Parameter = Field(default=Parameter(value=0.0)) # FCJ asymmetry + + def calculate_peak_widths(self, peak_centres: np.ndarray): + hg = caglioti_fwhm(peak_centres, float(self.u), float(self.v), float(self.w)) + hl = lorentzian_fwhm(peak_centres, float(self.x), float(self.y)) + + fwhm = tchz_combine_fwhm(hg, hl) + eta = tchz_eta(hg, hl, fwhm) + + return fwhm, eta + + def calculate_shape(self, x, centre, fwhm, eta, alpha): + dx = x - centre + + sigma = fwhm / (2 * np.sqrt(2 * np.log(2))) + gamma = fwhm / 2.0 + + # symmetric components + gauss = np.exp(-(dx**2) / (2 * sigma**2)) + lorentz = gamma**2 / (dx**2 + gamma**2) + + pv = eta * lorentz + (1 - eta) * gauss + + # FCJ asymmetry: exponential right-hand tailing + # (common diffraction approximation) + asym = np.exp(-alpha * np.clip(dx, 0, None)) + + return pv * asym + + def calculate_profile( + self, + x: np.ndarray, + peak_centres: np.ndarray, + peak_intensities: np.ndarray, + ) -> np.ndarray: + y = np.zeros_like(x, dtype=float) + + fwhm, eta = self.calculate_peak_widths(peak_centres) + + alpha = float(self.a) + + for i, centre in enumerate(peak_centres): + w = fwhm[i] + + start = np.searchsorted(x, centre - self.wdt * w) + end = np.searchsorted(x, centre + self.wdt * w, side="right") + + if end <= start: + continue + + xi = x[start:end] + + peak = self.calculate_shape( + xi, + centre, + w, + eta[i], + alpha, + ) + + y[start:end] += peak_intensities[i] * peak + + return y + + +IntrumentResolutionFunction = Annotated[ + Cagloti | ExtendedCaglioti | TCHZ | ModifiedPearsonVII | FCJPseudoVoigt, + Field(discriminator="irf_type"), +] diff --git a/src/xrpd_toolbox/fit_engine/peaks.py b/src/xrpd_toolbox/fit_engine/peaks.py new file mode 100644 index 0000000..63cf2e3 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/peaks.py @@ -0,0 +1,716 @@ +"""Peak shape definitions, peak fitting utilities, and profile calculation. + +This module defines analytical peak functions, Pydantic peak models, and +utility routines for XRPD profile generation and peak detection. +""" + +from __future__ import annotations + +import math +from abc import abstractmethod +from collections.abc import Collection, Sequence +from typing import Annotated, Literal, TypeAlias + +import numpy as np +import peakutils +from numba import njit +from pydantic import Field +from scipy.optimize import curve_fit +from scipy.special import erf + +from xrpd_toolbox.core import Parameter +from xrpd_toolbox.fit_engine.background import Background +from xrpd_toolbox.fit_engine.fitting_core import RefinementBaseModel + +IMPLEMENTED_PEAK_FUNCTONS: TypeAlias = Literal[ + "gaussian", "lorentzian", "pseudo_voigt", "tophat" +] + + +@njit() +def gaussian_sigma_to_fwhm(sigma: float | int) -> float: + """Convert a Gaussian standard deviation to full width at half maximum.""" + return float(sigma) * 2 * np.sqrt(2 * np.log(2)) + + +@njit() +def gaussian_fwhm_to_sigma(fwhm: float | int) -> float: + """Convert a Gaussian full width at half maximum to standard deviation.""" + return float(fwhm) / (2 * np.sqrt(2 * np.log(2))) + + +@njit() +def lorentzian_gamma_to_fwhm(gamma: float | int) -> float: + """Convert Lorentzian half width at half maximum to FWHM.""" + return 2 * float(gamma) + + +@njit() +def lorentzian_fwhm_to_gamma(fwhm: float | int) -> float: + """Convert Lorentzian FWHM to half width at half maximum.""" + return float(fwhm) / 2 + + +@njit() +def gaussian( + x: np.ndarray, + amplitude: float | int, + centre: float | int, + fwhm: float | int, + background: float | int | np.ndarray = 0, + normalised: bool = True, +) -> np.ndarray: + """ + Gaussian peak function. + + Parameters + ---------- + x : array-like + Input coordinate(s). + amplitude : float | int + Amplitude parameter: + - If normalised=True: total area under the curve. + - If normalised=False: peak height. + centre : float | int + Peak center. + fwhm : float | int + Full-Wdth at half maximum of the peak - the peak width (must be > 0). + background : float | int | array-like, optional + Additive background (constant or array matching `x`). Default is 0. + normalised : bool, optional + If True (default), returns an area-normalised Gaussian. + If False, returns a Gaussian with peak height A. + + Returns + ------- + NDArray[np.float64] + Evaluated Gaussian function. + """ + + sigma = gaussian_fwhm_to_sigma(fwhm) + + if normalised: + prefactor = amplitude / (sigma * np.sqrt(2 * np.pi)) + else: + prefactor = amplitude + + return prefactor * np.exp(-((x - centre) ** 2) / (2 * sigma**2)) + background + + +@njit() +def lorentzian( + x: np.ndarray, + amplitude: float | int, + centre: float | int, + fwhm: float | int, + background: float | int | np.ndarray = 0, + normalised: bool = True, +) -> np.ndarray: + """Lorentzian peak function. + + Parameters + ---------- + x : array-like + Input coordinate(s). + amplitude : float | int + Amplitude parameter: + - If normalised=True: total area under the curve. + - If normalised=False: peak height. + centre : float | int + Peak centre. + fwhm : float | int + Full width at half maximum. + background : float | int | array-like, optional + Additive background term. Default is 0. + normalised : bool, optional + If True, returns an area-normalised Lorentzian. + + Returns + ------- + NDArray[np.float64] + Evaluated Lorentzian function. + """ + gamma = float(fwhm) / 2 + + if normalised: + prefactor = amplitude / np.pi + core = gamma / ((x - centre) ** 2 + gamma**2) + else: + prefactor = amplitude + core = gamma**2 / ((x - centre) ** 2 + gamma**2) + + return prefactor * core + background + + +@njit() +def pseudo_voigt( + x: np.ndarray, + amplitude: float | int, + centre: float | int, + fwhm: float | int, + eta: float | int, + background: float | int | np.ndarray = 0, + normalised: bool = True, +) -> np.ndarray: + """ + Pseudo-Voigt peak function with a single FWHM parameter. + + Parameters + ---------- + x : array-like + Input coordinate(s). + amplitude : float | int + Amplitude parameter: + - If normalised=True: total area under the curve. + - If normalised=False: approximate peak height. + centre : float | int + Peak center. + fwhm : float | int + Full width at half maximum (must be > 0). + eta : float | int + Mixing parameter: + - 0 → pure Gaussian + - 1 → pure Lorentzian + background : float | int | array-like, optional + Additive background. Default is 0. + normalised : bool, optional + If True (default), area-normalised. + If False, amplitude ≈ peak height. + + Returns + ------- + NDArray[np.float64] + Evaluated pseudo-Voigt function. + """ + + fwhm = float(fwhm) + eta = float(eta) + + gauss = gaussian( + x=x, + amplitude=amplitude, + centre=centre, + fwhm=fwhm, + background=0, + normalised=normalised, + ) + lorentz = lorentzian( + x=x, + amplitude=amplitude, + centre=centre, + fwhm=fwhm, + background=0, + normalised=normalised, + ) + + pv = eta * lorentz + (1.0 - eta) * gauss + pv = pv + background + return pv + + +def smooth_tophat( + x: np.ndarray, + amplitude: float | int, + centre: float | int, + fwhm: float | int, + epsilon: float | int, + background: float | int | np.ndarray = 0, + normalised: bool = True, +): + """Return a Gaussian-smoothed top-hat profile. + + Parameters + ---------- + x : array-like + Input coordinate(s). + amplitude : float | int + Plateau area if normalised=True, otherwise plateau height. + centre : float | int + Centre of the plateau. + fwhm : float | int + Width of the plateau. + epsilon : float | int + Smoothing parameter for edge softening. + background : float | int | array-like, optional + Additive background. Default is 0. + normalised : bool, optional + If True, returns an area-normalised shape. + + Returns + ------- + NDArray[np.float64] + Evaluated smooth top-hat function. + """ + + sigma = max(epsilon * fwhm / 2.0, 1e-12) + half_width = fwhm / 2.0 + + left = (x - (centre - half_width)) / (np.sqrt(2) * sigma) + right = (x - (centre + half_width)) / (np.sqrt(2) * sigma) + + profile = 0.5 * (erf(left) - erf(right)) + + if normalised: + # area is already fwhm * 1.0 (plateau height = 1) + # so amplitude is converted to height + scale = amplitude / fwhm + else: + scale = amplitude + + return scale * profile + background + + +def closest_indices(arr1: np.ndarray, arr2: np.ndarray): + """Find the closest index in `arr2` for each value in `arr1`. + + Parameters + ---------- + arr1 : array-like + Values whose closest matches are sought. + arr2 : array-like + Reference values for matching. + + Returns + ------- + numpy.ndarray + Indices into `arr2` corresponding to the closest values. + """ + arr1 = np.asarray(arr1) + arr2 = np.asarray(arr2) + # Broadcast arr1 and arr2 to compute pairwise differences + diffs = np.abs(arr1[..., np.newaxis] - arr2) + # Find the index of the minimum difference along the last axis (arr2) + idx = np.argmin(diffs, axis=-1) + return idx + + +def peak_factory(peak_type: str): + """Return the peak model class for a given peak type name. + + Parameters + ---------- + peak_type : str + Supported values: 'gaussian', 'lorentzian', 'pseudo_voigt', 'tophat'. + + Returns + ------- + type[Peak] + The peak model class corresponding to `peak_type`. + + Raises + ------ + ValueError + If `peak_type` is not in the implemented peak types. + """ + match peak_type: + case "gaussian": + return GaussianPeak + case "lorentzian": + return LorentzianPeak + case "pseudo_voigt": + return PseudoVoigtPeak + case "tophat": + return TopHatPeak + case _: + raise ValueError( + f"peak_type must be one of the following {IMPLEMENTED_PEAK_FUNCTONS}" + ) + + +def estimate_fwhm( + x_values: np.ndarray, + y_values: np.ndarray, + peak_index: int, +) -> float: + """ + Estimate the full width at half maximum (FWHM) of a peak + using neighbouring points. + + Parameters + ---------- + x_values : NDArray[np.float64] + Coordinate values. + y_values : NDArray[np.float64] + Signal/intensity values. + peak_index : int + Index of the peak maximum. + + Returns + ------- + float + Estimated FWHM. + """ + # --- fallback based on sampling spacing --- + if len(x_values) > 1: + average_spacing = float(np.mean(np.diff(x_values))) + else: + average_spacing = 1.0 + + fallback_fwhm = average_spacing * 2 + + # need neighbours on both sides + if peak_index <= 0 or peak_index >= len(x_values) - 1: + return fallback_fwhm + + peak_x = x_values[peak_index] + peak_y = y_values[peak_index] + + if peak_y <= 0 or not np.isfinite(peak_y): + return fallback_fwhm + + estimated_sigmas: list[float] = [] + + # --- right neighbour --- + right_x = x_values[peak_index + 1] + right_y = y_values[peak_index + 1] + + if 0 < right_y < peak_y: + try: + sigma = abs(right_x - peak_x) / np.sqrt(2 * np.log(peak_y / right_y)) + estimated_sigmas.append(sigma) + except Exception: + pass + + # --- left neighbour --- + left_x = x_values[peak_index - 1] + left_y = y_values[peak_index - 1] + + if 0 < left_y < peak_y: + try: + sigma = abs(left_x - peak_x) / np.sqrt(2 * np.log(peak_y / left_y)) + estimated_sigmas.append(sigma) + except Exception: + pass + + if not estimated_sigmas: + return fallback_fwhm + + mean_sigma = float(np.mean(estimated_sigmas)) + + # convert sigma to FWHM + fwhm = mean_sigma * 2 * np.sqrt(2 * np.log(2)) + + if not np.isfinite(fwhm) or fwhm <= 0: + return fallback_fwhm + + return fwhm + + +def fit_peaks( + x: np.ndarray, y: np.ndarray, initial_x_pos: Collection[int | float] +) -> list[Peak]: + """Fit Gaussian peaks to observed data using initial position guesses. + + Parameters + ---------- + x : NDArray[np.float64] + Coordinate values. + y : NDArray[np.float64] + Observed intensity values. + initial_x_pos : Collection[int | float] + Initial guesses for the peak positions. + + Returns + ------- + list[Peak] + Fitted Gaussian peak models. + """ + fitted_peaks = [] + + for x_guess in initial_x_pos: + try: + peak_index = int(np.argmin(np.abs(x - x_guess))) + width_guess = estimate_fwhm(x, y, peak_index) + # Estimate amplitude from nearest data point + idx = np.argmin(np.abs(x - x_guess)) + amp_guess = y[idx] * np.sqrt(2 * np.pi) * width_guess + + p0 = [ + amp_guess, + x_guess, + width_guess, + ] + + start_idx = np.searchsorted(x, x_guess - 1) + end_idx = np.searchsorted(x, x_guess + 1, side="right") + + x_fit = x[start_idx:end_idx] + y_fit = y[start_idx:end_idx] + + if len(y_fit) == 0: + fitted_peaks.append( + GaussianPeak(amplitude=math.nan, centre=math.nan, fwhm=math.nan) + ) + continue + + popt, _ = curve_fit(gaussian, x_fit, y_fit, p0=p0, maxfev=10000) # type: ignore + + fitted_peaks.append( + GaussianPeak(amplitude=popt[0], centre=popt[1], fwhm=popt[2]) + ) + + except RuntimeError: + fitted_peaks.append( + GaussianPeak(amplitude=math.nan, centre=math.nan, fwhm=math.nan) + ) + + return fitted_peaks + + +def find_and_fit_peaks(x: np.ndarray, y: np.ndarray, smoothing: int = 5) -> list[Peak]: + """Detect peaks in a signal and fit Gaussian models automatically. + + Parameters + ---------- + x : NDArray[np.float64] + Coordinate values. + y : NDArray[np.float64] + Observed signal intensities. + smoothing : int, optional + Width of the moving-average filter used to reduce noise. + + Returns + ------- + list[Peak] + Gaussian peak models fit to the detected peak positions. + """ + + y_smoothed = np.convolve( + y, np.ones(smoothing), mode="same" + ) # smooth the data to reduce noise + + threshold = np.amax(y_smoothed) / smoothing + + indexes = peakutils.indexes(y_smoothed, thres=threshold, min_dist=3) # type: ignore + + initial_x_pos = x[indexes] + fitted_peaks = fit_peaks(x, y_smoothed, initial_x_pos=initial_x_pos) + + return fitted_peaks + + +class Peak(RefinementBaseModel): + """Abstract base class for parameterised peak models. + + Peak subclasses provide analytic peak shapes and support refinement + through the shared parameter interface. + """ + + amplitude: Parameter | float = Field(gt=0) + centre: Parameter | float = Field(gt=0) + fwhm: Parameter | float = Field(gt=0, default=Parameter(value=0.02)) + normalised: bool = True # if normalised the + + @abstractmethod + def calculate(self, x: np.ndarray) -> np.ndarray: + """Evaluate the peak shape on a coordinate array.""" + raise NotImplementedError("Must implement calculate method in peak subclass") + + +class GaussianPeak(Peak): + """Gaussian peak model class.""" + + peak_type: Literal["gaussian"] = "gaussian" + + def calculate(self, x: np.ndarray) -> np.ndarray: + return gaussian( + x, + float(self.amplitude), + float(self.centre), + float(self.fwhm), + normalised=self.normalised, + ) + + +class LorentzianPeak(Peak): + """Lorentzian peak model class.""" + + peak_type: Literal["lorentzian"] = "lorentzian" + + def calculate(self, x: np.ndarray) -> np.ndarray: + return lorentzian( + x, + float(self.amplitude), + float(self.centre), + float(self.fwhm), + normalised=self.normalised, + ) + + +class PseudoVoigtPeak(Peak): + """Pseudo-Voigt peak model class combining Gaussian and Lorentzian shapes.""" + + peak_type: Literal["pseudo_voigt"] = "pseudo_voigt" + + eta: Parameter | float | int = Field( + ge=0, le=1, default=0.5 + ) # used for pseudo-voigt - mixing param + + def calculate(self, x: np.ndarray) -> np.ndarray: + return pseudo_voigt( + x, + float(self.amplitude), + float(self.centre), + float(self.fwhm), + float(self.eta), + normalised=self.normalised, + ) + + +class TopHatPeak(Peak): + """Smoothed top-hat peak model class.""" + + peak_type: Literal["tophat"] = "tophat" + + epsilon: Parameter | float | int = Field( + ge=0, le=1, default=0.1 + ) # used for tophat - smoothing + + def calculate(self, x: np.ndarray) -> np.ndarray: + return smooth_tophat( + x, + float(self.amplitude), + float(self.centre), + float(self.fwhm), + float(self.epsilon), + normalised=self.normalised, + ) + + +# would it be useful to have a peak that can be any of of the other peaks +# possibly useful if you don't know what type of peak shape you actually want? +# class MutatablePeak(Peak): +# peak_type: Literal["mutatable"] = "mutatable" + + +def calculate_profile( + x: np.ndarray, + peaks: Sequence[Peak], + background: int | float | np.ndarray | Background = 0, + phase_scale: int | float = 1, + wdt: int | float = 5, +): + """Calculate the combined peak profile and optional background. + + Parameters + ---------- + x : NDArray[np.float64] + Coordinate values at which to evaluate the profile. + peaks : Sequence[Peak] + Sequence of peak models to sum. + background : int | float | np.ndarray | Background, optional + Baseline to add to the summed peak profile. Default is 0. + phase_scale : int | float, optional + Multiplicative scale factor applied to the peak intensity. + wdt : int | float, optional + Range in units of peak FWHM used when evaluating each peak. + + Returns + ------- + numpy.ndarray + Summed intensity profile for the input coordinates. + """ + + if isinstance(background, np.ndarray): + assert len(x) == len(background) + + intensity = np.zeros_like(x) + + for peak in peaks: + start_idx = np.searchsorted(x, float(peak.centre) - (wdt * float(peak.fwhm))) + end_idx = np.searchsorted( + x, float(peak.centre) + (wdt * float(peak.fwhm)), side="right" + ) + + if end_idx <= start_idx: + continue + + xi = x[start_idx:end_idx] + peak_intensity = peak.calculate(xi) + intensity[start_idx:end_idx] += peak_intensity + + if isinstance(background, Background): + background = background.calculate(x) + + intensity = (intensity * phase_scale) + background + + return intensity + + +@njit(parallel=True) +def calculate_profile_parallel( + x: np.ndarray, + peaks: Sequence[Peak], + background: int | float | np.ndarray | Background = 0, + phase_scale: int | float = 1, + wdt: int | float = 5, +): + """Placeholder for a parallel profile calculation implementation. + + Parameters + ---------- + x : NDArray[np.float64] + Coordinate values. + peaks : Sequence[Peak] + Sequence of peak models. + background : int | float | np.ndarray | Background, optional + Background model or baseline. + phase_scale : int | float, optional + Multiplicative intensity scale. + wdt : int | float, optional + Evaluation window in units of FWHM. + + Returns + ------- + numpy.ndarray + Combined intensity profile. + + Notes + ----- + This implementation is currently not completed and raises + NotImplementedError by design. + """ + + raise NotImplementedError("Not implemented well yet") + + if isinstance(background, np.ndarray): + assert len(x) == len(background) + + intensity = np.zeros_like(x) + + for peak_index in range(len(peaks)): + peak = peaks[peak_index] + + assert peak.background == 0 + + start_idx = np.searchsorted(x, peak.centre - (wdt * peak.fwhm)) + end_idx = np.searchsorted(x, peak.centre + (wdt * peak.fwhm), side="right") + + xi = x[start_idx:end_idx] + peak_intensity = peak.calculate(xi) + + intensity[start_idx:end_idx] += peak_intensity + + intensity = (intensity * phase_scale) + background + + return intensity + + +PeakType = Annotated[ + GaussianPeak | LorentzianPeak | PseudoVoigtPeak | TopHatPeak, + Field(discriminator="peak_type"), +] + + +if __name__ == "__main__": + gauss = PseudoVoigtPeak(amplitude=1, centre=1, fwhm=1) + + print(gauss) + + gauss.refine_none() + + print(gauss) + + gauss.refine_all() + + print(gauss) diff --git a/src/xrpd_toolbox/fit_engine/phase_matching.py b/src/xrpd_toolbox/fit_engine/phase_matching.py new file mode 100644 index 0000000..c8aef52 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/phase_matching.py @@ -0,0 +1,2 @@ +# TODO: +# Autophase matching diff --git a/src/xrpd_toolbox/fit_engine/profile_calculation.py b/src/xrpd_toolbox/fit_engine/profile_calculation.py new file mode 100644 index 0000000..9c28678 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/profile_calculation.py @@ -0,0 +1,1126 @@ +from collections.abc import Collection, Sequence +from functools import cached_property +from pathlib import Path +from typing import Literal, TypeAlias + +import matplotlib.pyplot as plt +import numpy as np + +# from numba import njit +from pydantic import Field, computed_field, model_validator + +from xrpd_toolbox.core import ( + DataType, + Parameter, + ScatteringData, + SerialisableNDArray, +) +from xrpd_toolbox.fit_engine.atom import Atoms +from xrpd_toolbox.fit_engine.background import ( + Background, + BackgroundType, +) +from xrpd_toolbox.fit_engine.constants import ( + ELEMENT_ATOMIC_NUMBER, +) +from xrpd_toolbox.fit_engine.fit_statistics import calculate_chi_squared +from xrpd_toolbox.fit_engine.fitting_core import ( + Model, + RefinementBaseModel, + refine_model, +) +from xrpd_toolbox.fit_engine.form_factors import X_RAY_FORM_FACTORS +from xrpd_toolbox.fit_engine.lattice import ( + Lattice, + crystal_lattice_factory, +) +from xrpd_toolbox.fit_engine.peak_shape_functions import ( + FCJPseudoVoigt, + IntrumentResolutionFunction, +) +from xrpd_toolbox.fit_engine.peaks import ( + PeakType, + calculate_profile, + peak_factory, +) +from xrpd_toolbox.fit_engine.symmetry import ( + SpaceGroup, + format_space_group_name, + get_symmetry_tables, +) +from xrpd_toolbox.plotting import FittedDataPlot +from xrpd_toolbox.utils.cif_reader import read_cif +from xrpd_toolbox.utils.unit_conversion import ( + beam_energy_to_wavelength, + q_space_to_s, + q_space_to_theta, +) + +CrystalType: TypeAlias = Literal["powder", "single-crystal"] + + +ITC_TABLES = get_symmetry_tables() + + +def merge_peaks( + two_theta, intensity, hkl, tol=1e-5 +) -> tuple[np.ndarray, np.ndarray, list]: + """ + Vectorised merging of reflections with same 2θ (within tolerance). + Sums intensities (equivalent to multiplicity handling). + """ + + # Sort by 2θ + sort_idx = np.argsort(two_theta) + tth = two_theta[sort_idx] + inten = intensity[sort_idx] + hkl_sorted = hkl[sort_idx] + + # Find group boundaries + dt = np.diff(tth) + new_group = np.concatenate(([True], dt > tol)) + + # Indices where groups start + group_starts = np.flatnonzero(new_group) + + # Sum intensities per group + merged_intensity = np.add.reduceat(inten, group_starts) + + # Representative 2θ (take first in each group) + merged_tth = tth[group_starts] + + # HKL groups (still needs object handling) + group_indices = np.split(np.arange(len(tth)), group_starts[1:]) + merged_hkl = [hkl_sorted[idx] for idx in group_indices] + + return merged_tth, merged_intensity, merged_hkl + + +# @njit() +def absorption_correction( + theta: np.ndarray, + mu: float, + radius: float, +) -> np.ndarray: + """ + Debye–Scherrer absorption correction (capillary geometry). + + Parameters + ---------- + theta : np.ndarray + Bragg angle in radians + mu : float + Linear absorption coefficient (1 / length) + radius : float + Capillary radius (same length units as mu^-1) + + Returns + ------- + np.ndarray + Absorption correction factor + """ + x = 2.0 * mu * radius / np.sin(theta) + return (1.0 - np.exp(-x)) / x + + +def calculate_form_factor(elements: Collection[str], s: np.ndarray) -> np.ndarray: + params = np.asarray([X_RAY_FORM_FACTORS[el] for el in elements]) + + if params.shape[0] != len(elements): + raise ValueError("Element form factor parameters not found for all elements") + + a = params[:, 0:5] # (n_atoms, 5) + c = params[:, 5] # (n_atoms,) + b = params[:, 6:11] # (n_atoms, 5) + + s2 = s**2 # (s,) + + exp_term = np.exp(-s2[:, None, None] * b[None, :, :]) + + ff = np.sum(a[None, :, :] * exp_term, axis=2) + c[None, :] + + return ff # (n_atoms, s) + + +# @njit() +def calculate_debye_waller_factor(b_iso: np.ndarray, s: np.ndarray): + """s is scattering vector in radians""" + # (n_hkl, n_atoms) + return np.exp(-np.outer(s**2, b_iso)) + + +def calculate_structure_factor( + hkl: np.ndarray, + positions: np.ndarray, + occupancy: np.ndarray, + b_iso: np.ndarray, + elements: np.ndarray, + q: np.ndarray, +) -> np.ndarray: + phase = 2j * np.pi * (hkl @ positions.T) # (n_hkl, n_atoms) + + s = q_space_to_s(q) + ff = calculate_form_factor(elements, s) # (n_hkl, n_atoms) + dw = calculate_debye_waller_factor(b_iso, s) # (n_hkl, n_atoms) + + f_hkl = np.sum( + occupancy * ff * dw * np.exp(phase), + axis=1, + ) + + ###this is an alternate way which may be faster for larger arrays + # f_hkl = np.einsum( + # "a,ha,ha,ha->h", + # occupancy, + # ff, + # dw, + # np.exp(phase), + # optimize=True, + # ) + + return f_hkl + + +# @njit +# @timeit +def hkl_laue_reduction( + hkl: np.ndarray, rotations: np.ndarray +) -> tuple[np.ndarray, np.ndarray]: + """ + Laue reduction with positive-preference canonicalisation. + """ + + equiv = np.einsum("rij,nj->rni", rotations, hkl, optimize=True) + equiv = np.rint(equiv).astype(int) # (R,N,3) + + # → (N,R,3) + equiv = np.transpose(equiv, (1, 0, 2)) + + # enforce "first non-zero positive" rule + equiv = np.abs(equiv) + + # sort to get positive hkls + order = np.lexsort((equiv[:, :, 2], equiv[:, :, 1], equiv[:, :, 0])) + canonical = equiv[np.arange(len(equiv)), order[:, -1]] # -1 not 0 + # -------------------------------------------------- + # Step 3: unique + multiplicity + # -------------------------------------------------- + unique, counts = np.unique(canonical, axis=0, return_counts=True) + + return unique, counts + + +def q_vectors_from_hkl( + hkl: np.ndarray, + reciprocal_lattice_matrix: np.ndarray, +) -> np.ndarray: + """Also know as G in single crystal""" + + return hkl @ reciprocal_lattice_matrix + + +def q_magnitude(q_vectors: np.ndarray) -> np.ndarray: + """also known as G* in single crystal""" + + return np.linalg.norm(q_vectors, axis=1) + + +# @njit +def lorentz_polarisation( + theta: np.ndarray, + polarisation: float | int = 0.0, + azimuth: float | int | None = None, +) -> np.ndarray: + """ + Lorentz–polarisation factor for X-ray diffraction. + + Parameters + ---------- + theta : np.ndarray + Bragg angle in radians. + polarisation : float, optional + Degree of polarisation (0 = unpolarised, 1 = fully polarised). + azimuth : float, optional + Azimuthal angle (radians) between scattering and polarisation planes. + If None, assumes powder-averaged synchrotron geometry. + + Returns + ------- + np.ndarray + Lorentz–polarisation factor. + """ + + return (1 + np.cos(2 * theta) ** 2) / (np.sin(theta) ** 2 * np.cos(theta)) + + two_theta = 2 * theta + + cos2theta = np.cos(two_theta) ** 2 + sin2theta = np.sin(two_theta) + + if azimuth is None: + return (1.0 + cos2theta * (1.0 - 2.0 * polarisation)) / (sin2theta) + else: + return ( + (1.0 - polarisation) * (1.0 + cos2theta) + + polarisation * (1.0 - cos2theta * np.cos(azimuth) ** 2) + ) / (sin2theta * cos2theta) + + +# @njit +def unit_cell_volume( + a: float | np.ndarray, + b: float | np.ndarray, + c: float | np.ndarray, + alpha: float | np.ndarray, + beta: float | np.ndarray, + gamma: float | np.ndarray, + degrees: bool = True, +) -> np.ndarray: + """ + Compute unit cell volume for arbitrary lattice. + + Parameters + ---------- + a, b, c : float or np.ndarray + Lattice parameters + alpha, beta, gamma : float or np.ndarray + Angles (degrees by default) + degrees : bool + If True, convert angles from degrees to radians + + Returns + ------- + np.ndarray + Unit cell volume + """ + a = np.asarray(a) + b = np.asarray(b) + c = np.asarray(c) + + if degrees: + alpha = np.radians(alpha) + beta = np.radians(beta) + gamma = np.radians(gamma) + + cos_a = np.cos(alpha) + cos_b = np.cos(beta) + cos_g = np.cos(gamma) + + volume = ( + a + * b + * c + * np.sqrt(1 - cos_a**2 - cos_b**2 - cos_g**2 + 2 * cos_a * cos_b * cos_g) + ) + + return volume + + +def lattice_to_metric(a, b, c, alpha, beta, gamma): + alpha, beta, gamma = np.radians([alpha, beta, gamma]) + + g = np.array( + [ + [a * a, a * b * np.cos(gamma), a * c * np.cos(beta)], + [a * b * np.cos(gamma), b * b, b * c * np.cos(alpha)], + [a * c * np.cos(beta), b * c * np.cos(alpha), c * c], + ] + ) + + g_star = np.linalg.inv(g) + return g, g_star + + +####### calculate peak positions +def allowed_reflections_simple(hkl: np.ndarray, centering: str): + """for a given array of hkl value it returns a mask of + hkls which are forbidden by centering""" + + h, k, l = hkl[:, 0], hkl[:, 1], hkl[:, 2] # noqa - crystallogrpahic nomenclature + + if centering == "P": + # Primitive: no centering → all allowed + return np.ones(len(hkl), dtype=bool) + + elif centering == "I": + # Body-centred: (0,0,0) + (1/2,1/2,1/2) + # h+k+l = 2n + return (h + k + l) % 2 == 0 + + elif centering == "F": + # Face-centred: (0,0,0), (1/2,1/2,0), (1/2,0,1/2), (0,1/2,1/2) + # all even or all odd + even = (h % 2 == 0) & (k % 2 == 0) & (l % 2 == 0) + odd = (h % 2 != 0) & (k % 2 != 0) & (l % 2 != 0) + return even | odd + + elif centering == "C": + # C-centred: centering on ab faces → (1/2,1/2,0) + # h + k = 2n + return (h + k) % 2 == 0 + + elif centering == "A": + # A-centred: centering on bc faces → (0,1/2,1/2) + # k + l = 2n + return (k + l) % 2 == 0 + + elif centering == "B": + # B-centred: centering on ac faces → (1/2,0,1/2) + # h + l = 2n + return (h + l) % 2 == 0 + + elif centering == "R": + # Rhombohedral (hex setting) + # -h + k + l = 3n + # Rhombohedral - my fave - magnets baby + return (-h + k + l) % 3 == 0 + + else: + raise ValueError(f"Unknown centering: {centering}") + + +def generate_h_k_l(hkl_max: np.ndarray) -> np.ndarray: + """generate hkl and filter forbidden beam centre hkl = 0 0 0""" + + hmax = hkl_max[0] + kmax = hkl_max[1] + lmax = hkl_max[2] + + h_range = np.arange(-hmax, hmax + 1) + k_range = np.arange(-kmax, kmax + 1) + l_range = np.arange(-lmax, lmax + 1) + + hkl = np.array(np.meshgrid(h_range, k_range, l_range)).reshape(3, -1).T + return hkl[np.any(hkl != 0, axis=1)] + + +def generate_hkl(reciprocal_lattice_matrix: np.ndarray, q_max: float) -> np.ndarray: + norms = np.linalg.norm(reciprocal_lattice_matrix, axis=0) + + hmax = int(np.ceil(q_max / norms[0])) + kmax = int(np.ceil(q_max / norms[1])) + lmax = int(np.ceil(q_max / norms[2])) + + hkl = generate_h_k_l(np.array([hmax, kmax, lmax])) + + q_vec = hkl @ reciprocal_lattice_matrix + q = np.linalg.norm(q_vec, axis=1) + + return hkl[q <= q_max] + + +def reciprocal_lattice_matrix( + a: float, b: float, c: float, alpha: float, beta: float, gamma: float +) -> np.ndarray: + a_vec = np.array([a, 0.0, 0.0]) + b_vec = np.array([b * np.cos(gamma), b * np.sin(gamma), 0.0]) + + cx = c * np.cos(beta) + cy = c * (np.cos(alpha) - np.cos(beta) * np.cos(gamma)) / np.sin(gamma) + cz = np.sqrt(max(c**2 - cx**2 - cy**2, 0.0)) + c_vec = np.array([cx, cy, cz]) + + volume = np.dot(a_vec, np.cross(b_vec, c_vec)) + + a_star = 2 * np.pi * np.cross(b_vec, c_vec) / volume + b_star = 2 * np.pi * np.cross(c_vec, a_vec) / volume + c_star = 2 * np.pi * np.cross(a_vec, b_vec) / volume + + return np.vstack([a_star, b_star, c_star]) + + +def allowed_reflections( + hkl: np.ndarray, + rotations: np.ndarray, + translations: np.ndarray, + tol: float = 1e-8, +) -> np.ndarray: + hkl_rot = np.einsum("rij,nj->rni", rotations, hkl, optimize=True) + delta = hkl_rot - hkl[None] + invariant = np.all(np.isclose(delta, np.rint(delta), atol=tol), axis=2) + phase = 2 * np.pi * (hkl @ translations.T) + real = (np.cos(phase).T * invariant).sum(axis=0) + imag = (np.sin(phase).T * invariant).sum(axis=0) + extinct = np.isclose(real, 0.0, atol=tol) & np.isclose(imag, 0.0, atol=tol) + return ~extinct + + +def d_spacing(hkl: np.ndarray, g_star: np.ndarray) -> np.ndarray: + """calculate d spacing from reciprocal metric tensor and hkls""" + + g_hkl = np.einsum("mi,ij,nj->n", hkl, g_star, hkl, optimize=True) + return 1.0 / np.sqrt(g_hkl) + + +def plot_form_factors(elements: Sequence[str], q_space: np.ndarray | None = None): + if q_space is None: + q_space = np.linspace(0.01, 25, 1000) + + scatter_vec = q_space / (4 * np.pi) + + form_factors = calculate_form_factor(elements, scatter_vec).T + + plt.figure(figsize=(16, 10)) + + for element, ff in zip(elements, form_factors, strict=True): + plt.plot(q_space, ff, label=element) + plt.legend() + plt.show() + + +def apply_symmetry_operations_to_atoms( + asymmetric_atoms: Atoms, rotations: np.ndarray, translations: np.ndarray +) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: + """Expand asymmetric unit → full unit cell (vectorised).""" + + # base_pos = np.array([a.xyz for a in asymmetric_atoms]) + # base_occ = np.array([a.occupancy for a in asymmetric_atoms]) + # base_b = np.array([a.b_iso for a in asymmetric_atoms]) + # base_el = np.array([a.element for a in asymmetric_atoms]) + + positions = ( + np.einsum("sij,aj->sai", rotations, asymmetric_atoms.xyz, optimize=True) + + translations[:, None, :] + ) + + positions = positions % 1.0 + positions = np.round(positions, 10) + + positions = positions.reshape(-1, 3) + occupancies = np.tile(asymmetric_atoms.occupancies, len(rotations)) + b_iso = np.tile(asymmetric_atoms.b_iso, len(rotations)) + elements = np.tile(asymmetric_atoms.elements, len(rotations)) + + # key = np.round(positions * 1e8).astype(int) + _, idx = np.unique(positions, axis=0, return_index=True) + + positions = positions[idx] + occupancies = occupancies[idx] + b_iso = b_iso[idx] + elements = elements[idx] + + return positions, occupancies, b_iso, elements + + +# pydantic models to store the data + + +class Radiation(RefinementBaseModel): + """This defines the type of radiation that is diffracting""" + + radiation: DataType + wavelength: float | int | None = None + energy: float | int | None = None + + @model_validator(mode="after") + def check_wavelength_or_energy(self): + if ( + self.radiation in ["xray", "lab-xray", "cw-neutron"] + and self.energy is not None + and self.wavelength is None + ): + self.wavelength = beam_energy_to_wavelength(self.energy) + + return self + + +class Structure(RefinementBaseModel): + """This should contain everything needed to calculate the structure factor, + peak intensities and peak position of the diffraction peeaks + lattice: Lattice + atoms: Atoms + spacegroup_symbol: str = "P1" + symmetry_operations: np.ndarray + """ + + spacegroup: str = "P1" + lattice: Lattice + atoms: Atoms + name: str | None = None + source: str | None = None + # symmetry_operations: npt.NDArray[np.str_] | None = None + + @classmethod + def load_from_cif(cls, cif_filepath: str | Path) -> "Structure": + return cif_to_structure(cif_filepath) + + @cached_property + def spacegroup_class(self) -> SpaceGroup: + sg = ITC_TABLES[self.spacegroup] + return sg + + @cached_property + def spacegroup_number(self) -> int: + sg = ITC_TABLES[self.spacegroup] + return int(sg["number"]) + + # @cached_property + @property + def element_array(self): + # element_array = np.array([a.element for a in self.atoms]) # (N_atoms, 3) + return self.atoms.elements + + @property + def positions(self): + """Turns the list of Atoms into a vectorised numpy array + for fast computation later""" + # positions = np.stack([a.xyz for a in self.atoms]) # (N_atoms, 3) + return self.atoms.xyz + + @property + def occupancies(self): + # occ_array = np.array([a.occupancy for a in self.atoms]) # (N_atoms,) + return self.atoms.occupancies + + @property + def b_iso_array(self): + # b_iso_array = np.array([a.b_iso for a in self.atoms]) # (N_atoms,) + return self.atoms.b_iso + + # @cached_property + @property + def atomic_numbers(self): + atomic_numbers = np.array( + [ELEMENT_ATOMIC_NUMBER[el] for el in self.atoms.elements] + ) # (N_atoms,) + return atomic_numbers + + @cached_property + def centering(self): + return list(self.spacegroup)[0] + + def reciprocal_lattice_matrix(self): + return reciprocal_lattice_matrix( + a=float(self.lattice.a), + b=float(self.lattice.b), + c=float(self.lattice.c), + alpha=float(self.lattice.alpha_radians), + beta=float(self.lattice.beta_radians), + gamma=float(self.lattice.gamma_radians), + ) + + @property + def volume(self): + return unit_cell_volume( + a=float(self.lattice.a), + b=float(self.lattice.b), + c=float(self.lattice.c), + alpha=float(self.lattice.alpha_radians), + beta=float(self.lattice.beta_radians), + gamma=float(self.lattice.gamma_radians), + degrees=True, + ) + + # TODO: Make this read from the cif file if provided + def get_symmetry_operations(self): + # if self.symmetry_operations is None: + sg = ITC_TABLES[self.spacegroup] + sym_ops = sg.get_rotations_and_translations() + + # else: + # sym_ops = self.symmetry_operations + + return sym_ops + + def generate_structure_hkls( + self, + reciprocal_lattice_matrix: np.ndarray, + rotations: np.ndarray, + translations: np.ndarray, + q_max: float, + ) -> np.ndarray: + """HKL generator with systematic absence filtering + based on symmetry operations.""" + + # generate hkls + hkl = generate_hkl(reciprocal_lattice_matrix, q_max=q_max) + # remove systematic absences + + mask = allowed_reflections(hkl, rotations, translations) + return hkl[mask] + + # @timeit + def calculate_reflections( + self, + wavelength: float | int = 1.5406, + mode: CrystalType = "powder", + radiation: DataType = "xray", + multiplicity_method: bool = False, + ) -> tuple[list, np.ndarray, np.ndarray, np.ndarray]: + """calculates peaks""" + + reciprocal_lattice_matrix = self.reciprocal_lattice_matrix() + rotations, translations = self.get_symmetry_operations() + + # g, g_star = lattice_to_metric( + # self.lattice.a, + # self.lattice.b, + # self.lattice.c, + # self.lattice.alpha, + # self.lattice.beta, + # self.lattice.gamma, + # ) + + q_max = 4 * np.pi / wavelength + + hkl = self.generate_structure_hkls( + reciprocal_lattice_matrix, rotations, translations, q_max + ) + + # hkl, multiplicity = hkl_laue_reduction(hkl, rotations) + + # mask = allowed_reflections_simple(hkl, self.centering) + # hkl = hkl[mask] + + # d_space = d_spacing(hkl, g_star) + # Bragg angle + # theta = np.arcsin(wavelength / (2 * d_space)) + # s = np.sin(theta) / wavelength + + if mode == "powder": + if multiplicity_method: + hkl, multiplicity = hkl_laue_reduction(hkl, rotations) + # some pxrd refs are equal + else: + multiplicity = np.ones(len(hkl)) + else: + multiplicity = np.ones(len(hkl)) + + q_vec = q_vectors_from_hkl(hkl, reciprocal_lattice_matrix) + q = q_magnitude(q_vec) + + # print(q.shape, hkl.shape) + assert q.shape[0] == hkl.shape[0] + + sort_index = np.argsort(q) + q = q[sort_index] + q_vec = q_vec[sort_index] + hkl = hkl[sort_index] + multiplicity = multiplicity[sort_index] + + theta = q_space_to_theta(q, wavelength=wavelength) # in radians still + two_theta = 2 * theta + peak_centres_tthdeg = np.degrees(two_theta) + + # positions = self.positions + # occupancies = self.occupancies + # b_iso = self.b_iso_array + # elements = self.element_array + + positions, occupancies, b_iso, elements = apply_symmetry_operations_to_atoms( + self.atoms, rotations, translations + ) + + structure_factor = calculate_structure_factor( + hkl=hkl, + positions=positions, + occupancy=occupancies, + b_iso=b_iso, + elements=elements, + q=q, + ) + + f_abs = np.abs(structure_factor) + structure_factor_squared = f_abs**2 # |F|**2 + + intensity = structure_factor_squared + + if multiplicity_method: + intensity = intensity * multiplicity + + intensity = intensity / (self.volume**2) + + # intensity = np.ones_like(intensity) # normalise to max 1 + + abs_corr = absorption_correction(theta, 0.1, 0.1) + intensity = intensity * abs_corr + + if mode == "powder": + lp_factor = lorentz_polarisation(theta, 0.9) # 0 for unpolarized + intensity = intensity * lp_factor + + peak_centres_tthdeg, intensity, hkl = merge_peaks( + peak_centres_tthdeg, intensity, hkl + ) + + return hkl, f_abs, peak_centres_tthdeg, intensity + + def to_peaks( + self, + wavelength: float | int = 1.5406, + mode: CrystalType = "powder", + peak_type: str = "gaussian", + radiation: DataType = "xray", + ): + hkl, f_abs, peak_centres_two_theta_degrees, intensity = ( + self.calculate_reflections(wavelength=wavelength, mode=mode) + ) + + peak_func = peak_factory(peak_type) + + peaks = [] + + for inten, tth in zip(intensity, peak_centres_two_theta_degrees, strict=True): + peaks.append(peak_func(amplitude=inten, centre=tth)) + + return peaks + + def calculate_profile( + self, + x: np.ndarray, + wavelength: float | int = 1.5406, + backround: int | float | np.ndarray | Background = 0, + mode: CrystalType = "powder", + peak_type: str = "gaussian", + phase_scale: int | float = 1, + wdt: int | float = 5, + radiation: DataType = "xray", + ) -> np.ndarray: + hkl, f_abs, two_theta_degrees, intensity = self.calculate_reflections( + wavelength=wavelength, mode=mode, radiation=radiation + ) + + peak_func = peak_factory(peak_type) + + peaks = [] + + for inten, tth in zip(intensity, two_theta_degrees, strict=True): + peaks.append(peak_func(amplitude=inten, centre=tth)) + + profile = PeakProfile( + x=x, peaks=peaks, background=backround, phase_scale=phase_scale, wdt=wdt + ) + + return profile.calculate_profile() + + def plot_unit_cell( + self, + ): + """ + Plot full unit cell (symmetry-expanded). + """ + + # Apply symmetry + rotations, translations = self.get_symmetry_operations() + + positions, occupancies, b_iso, elements = apply_symmetry_operations_to_atoms( + self.atoms, + rotations, + translations, + ) + + for el, pos in zip(elements, positions, strict=True): + print(f"{el}: {pos}") + + shifts = np.array( + [ + [0, 0, 0], + [0, 0, 1], + [0, 1, 0], + [0, 1, 1], + [1, 0, 0], + [1, 0, 1], + [1, 1, 0], + [1, 1, 1], + ], + dtype=float, + ) + + n_atoms = positions.shape[0] + n_shifts = shifts.shape[0] + + positions = positions[:, None, :] + shifts[None, :, :] + positions = positions.reshape(n_atoms * n_shifts, 3) + + elements = np.repeat(elements, len(shifts)) + occupancies = np.repeat(occupancies, len(shifts)) + + mask = ( + (positions[:, 0] >= 0) + & (positions[:, 0] <= 1) + & (positions[:, 1] >= 0) + & (positions[:, 1] <= 1) + & (positions[:, 2] >= 0) + & (positions[:, 2] <= 1) + ) + + positions = positions[mask] + elements = elements[mask] + occupancies = occupancies[mask] + + for el, pos in zip(elements, positions, strict=True): + print(f"{el}: {pos}") + + coords = positions + xlabel, ylabel, zlabel = "a", "b", "c" + + # Colors + unique_elements = np.unique(elements) + cmap = plt.cm.get_cmap("tab10", len(unique_elements)) + + element_to_color = {el: cmap(i) for i, el in enumerate(unique_elements)} + + colors = np.array([element_to_color[el] for el in elements]) + + # Sizes + sizes = 100 * np.array([ELEMENT_ATOMIC_NUMBER[el] for el in elements]) + + # Plot + fig = plt.figure() + ax = fig.add_subplot(111, projection="3d") + ax.set_aspect("equal") + ax.set_aspect("equal") + + ax.scatter( + coords[:, 0], + coords[:, 1], + coords[:, 2], # type: ignore + c=colors, + s=sizes, # type: ignore + depthshade=True, + # label=unique_elements, + ) + + # Formatting + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + ax.set_zlabel(zlabel) + + mins = coords.min(axis=0) + maxs = coords.max(axis=0) + max_range = (maxs - mins).max() + mid = (maxs + mins) / 2 + + ax.set_xlim(mid[0] - max_range / 2, mid[0] + max_range / 2) + ax.set_ylim(mid[1] - max_range / 2, mid[1] + max_range / 2) + ax.set_zlim(mid[2] - max_range / 2, mid[2] + max_range / 2) + + plt.xlim(0, 1) + plt.ylim(0, 1) + ax.set_zlim(0, 1) + # plt.legend() + plt.title(f"Unit Cell ({self.spacegroup})") + plt.tight_layout() + plt.show() + + +def cif_to_structure(cif_filepath: str | Path) -> Structure: + spacegroup_symbol, lattice, atoms, symmetry_operations, name = read_cif( + str(cif_filepath) + ) + + spacegroup = format_space_group_name(spacegroup_symbol) + + sg = ITC_TABLES[spacegroup] + crystal_class = sg["crystal_class"] + + latticecls = crystal_lattice_factory(crystal_class) + lattice = latticecls.model_validate(lattice) + + structure = Structure( + spacegroup=spacegroup, + lattice=lattice, + atoms=atoms, + source=str(cif_filepath), + name=name, + # symmetry_operations=symmetry_operations, + ) + + return structure + + +##### more complex pydantic models to do whole profiles +class PeakProfile(RefinementBaseModel): + phase_scale: int | float | Parameter = Parameter(value=1e-5, bounds=[0, np.inf]) + x: SerialisableNDArray + peaks: list[PeakType] + background: np.ndarray | int | float | Background = 0.0 + wdt: int | float = 5 + + @property + def sorted_peaks(self): + return sorted(self.peaks, key=lambda p: p.centre) + + # @timeit + def calculate_profile(self): + """calculates the profile with the parameters stored within self""" + + return calculate_profile( + x=self.x, + peaks=self.sorted_peaks, + background=self.background, + phase_scale=float(self.phase_scale), + wdt=self.wdt, + ) + + +class ReitveldRefinement(Model[ScatteringData]): + phase_scale: int | float | Parameter = Parameter(value=1e-2, bounds=[0, np.inf]) + structure: Structure | list[Structure] + zero_offset: int | float | Parameter = Parameter(value=0, bounds=[-10, 10]) + irf: IntrumentResolutionFunction = Field(default=FCJPseudoVoigt()) + background: np.ndarray | float | int | BackgroundType | Parameter = Parameter( + value=0 + ) + intensity_modifiers: Parameter | None = None + position_modifiers: Parameter | None = None + shape_modifiers: Parameter | None = None + calculated_intensity: SerialisableNDArray | None = Field( + default=None, repr=False + ) # this gets created the first time calc profile is run + + """How can we divide down a reitveld refinement - + peaks pos/intensity, peak width function, background, detecor parameters + """ + + def load_cif(self, cif_filepath: str | Path) -> Structure | list[Structure]: + new_structure = Structure.load_from_cif(cif_filepath) + + if isinstance(self.structure, Structure): + self.structure = [self.structure, new_structure] + elif isinstance(self.structure, list): + self.structure.append(new_structure) + else: + self.structure = new_structure + + return self.structure + + def save_cif(self, output_path: str | Path): + """Saves the structure to a CIF file.""" + assert self.structure is not None + raise NotImplementedError("CIF writing not implemented yet") + + def calculate_peaks(self): + if isinstance(self.structure, Structure): + return self.structure.calculate_reflections() + elif isinstance(self.structure, Collection): + raise NotImplementedError("Multiple phase calculation not implemented yet") + else: + raise Exception("Unknown structure") + + def calculate_profile(self) -> np.ndarray: + if not isinstance(self.structure, Structure): + raise NotImplementedError("Not yet implemented for mullti-phase patterns") + + hkl, f_abs, peak_centres_tthdeg, intensity = ( + self.structure.calculate_reflections(float(self.data.wavelength)) + ) + + zero_offset_x = self.data.x - float(self.zero_offset) + + calculated_intensity = self.irf.calculate_profile( + x=zero_offset_x, + peak_centres=peak_centres_tthdeg, + peak_intensities=intensity, + ) + + if isinstance(self.background, Background): + background = self.background.calculate(x=self.data.x) + else: + background = self.background + + self.calculated_intensity = ( + calculated_intensity * float(self.phase_scale) + ) + background + + return self.calculated_intensity + + @computed_field + @property + def chi_squared(self) -> float: + if self.calculated_intensity is not None: + chi_squared = calculate_chi_squared( + self.calculated_intensity, self.data.y, self.data.e + ) + + return chi_squared + + else: + return np.inf + + def calculate_residual(self) -> np.ndarray: + # http://pd.chem.ucl.ac.uk/pdnn/refine1/practice.htm + + self.calculated_intensity = self.calculate_profile() + + _ = self.chi_squared + + return self.data.y - self.calculated_intensity + + def plot(self): + # if self.calculated_intensity is None: + self.calculated_intensity = self.calculate_profile() + + if isinstance(self.background, Background): + background = self.background.calculate(self.data.x) + else: + background = float(self.background) + + plot_data = FittedDataPlot( + data=self.data, + calc=self.calculated_intensity, + diff=self.data.y - self.calculated_intensity, + background=background, + ) + plot_data.plot() + + +if __name__ == "__main__": + output_name = "/workspaces/outputs/test.toml" + + def test_refine_silicon(): + cif_filepath = "/workspaces/XRPD-Toolbox/cifs/Si.cif" + si_structure = Structure.load_from_cif(cif_filepath) + + beam_energy = 15 + wavelength = beam_energy_to_wavelength(beam_energy) + + data = ScatteringData.from_xye( + "/workspaces/outputs/step_scan/1410696.nxs_summed_mythen3.xye", + # "/workspaces/outputs/1429744_summed_mythen3.xye", + x_unit="tth", + data_type="xray", + wavelength=Parameter(value=wavelength, refine=False), + ) + + from xrpd_toolbox.fit_engine.background import ( + # ChebyshevBackground, + LinearInterpolationBackground, + ) + + background = LinearInterpolationBackground.estimate(data.x, data.y) + + model = ReitveldRefinement( + data=data, background=background, structure=si_structure + ) + + assert isinstance(model.background, Background) + model.background.refine_none() + + print(model.get_refinement_parameters()) + + model.irf.refine_none() + + updated, model, result = refine_model(model, plot=True) + + model.save(output_name) + + return model + + def test_load_refinement_and_refine(): + loaded_refinement = ReitveldRefinement.load(output_name) + + loaded_refinement.calculate_profile() + loaded_refinement.plot() + + # refine_model(loaded_refinement) + + model = test_refine_silicon() + # test_load_refinement_and_refine() + + two_theta = np.linspace(1, 70, 1000) + + width = FCJPseudoVoigt().calculate_peak_widths(two_theta)[0] + + plt.plot(two_theta, width) + plt.show() diff --git a/src/xrpd_toolbox/fit_engine/symmetry.py b/src/xrpd_toolbox/fit_engine/symmetry.py new file mode 100644 index 0000000..f14cf25 --- /dev/null +++ b/src/xrpd_toolbox/fit_engine/symmetry.py @@ -0,0 +1,334 @@ +import os +import re +from functools import lru_cache +from pathlib import Path + +import numpy as np +from yaml import safe_load + +from xrpd_toolbox.core import XRPDBaseModel +from xrpd_toolbox.fit_engine.constants import get_spacegroup_symbol + +_FRAC_RE = re.compile(r"([+-]?\d+)/(\d+)") + + +def frac_to_decimal_string(sym_strs: np.ndarray, dp: int = 3): + """ + Convert fractions in symmetry strings to decimals while preserving the + or - signs. + Example: "x+1/4" -> "x+0.25" + + Parameters + ---------- + sym_strs : array-like of str + + Returns + ------- + np.ndarray of str + """ + sym_strs = np.asarray(sym_strs, dtype=str) + + # Replacement function + def _replace_frac(match): + num, den = match.groups() + val = float(num) / float(den) + # Keep the explicit + if positive + return f"{val:+.{dp}g}" if val >= 0 else f"{val:.{dp}g}" + + # Apply to all strings (still vectorized over array, no per-character loops) + new_strs = np.array([_FRAC_RE.sub(_replace_frac, s) for s in sym_strs]) + return new_strs + + +def format_space_group_name(sg: str) -> str: + """Format space group name to a consistent format for lookup.""" + + sg = sg[0].upper() + sg[1:].lower() # upper case first letter + sg = re.sub(r"\s+", "", sg) # remove all whitespace + sg = re.sub(r"^([A-Za-z]+)3([A-Za-z]+)$", r"\1-3\2", sg) + sg = re.sub(r"([234])_1", r"\g<1>1", sg) # 2_1 → 21 etc. + + # remove trivial 1's (P121 → P21, P112 → P12 etc.) + # sg = re.sub(r"1(?=[xyzabcmbcn/:-]|$)", "", sg) + # sg = re.sub(r"^([A-Za-z])1+", r"\1", sg) # drop leading 1's + sg = re.sub(r"1$", "", sg) # drop trailing 1 + + return sg + + +def lattice_to_matrix( + a: float, + b: float, + c: float, + alpha: float, + beta: float, + gamma: float, +) -> np.ndarray: + """Convert lattice parameters to Cartesian lattice matrix.""" + + alpha_r, beta_r, gamma_r = np.radians([alpha, beta, gamma]) + + cos_a, cos_b, cos_g = np.cos([alpha_r, beta_r, gamma_r]) + sin_g = np.sin(gamma_r) + + a_vec = np.array([a, 0.0, 0.0]) + b_vec = np.array([b * cos_g, b * sin_g, 0.0]) + + cx = c * cos_b + cy = c * (cos_a - cos_b * cos_g) / sin_g + cz = np.sqrt(max(c**2 - cx**2 - cy**2, 0.0)) + + c_vec = np.array([cx, cy, cz]) + + return np.vstack([a_vec, b_vec, c_vec]) + + +def _convert_symmetry_operations_yaml(): + constants_folder = os.path.join(os.path.dirname(__file__), "constants") + + symmetry_operation_filepath = os.path.join( + constants_folder, "symmetry_operations.yaml" + ) + + with open(symmetry_operation_filepath) as file: + try: + symmetry_operations = safe_load(file) + except Exception: + raise + + new_spacegroups = {} + + for sg in symmetry_operations: + sg["symops"] = frac_to_decimal_string(sg["symops"]) + sg["ncsym"] = frac_to_decimal_string(sg["ncsym"]) + + sg_name = get_spacegroup_symbol(sg["number"]) + + sg["spacegroup"] = sg_name + + if sg_name in new_spacegroups: + continue + + new_spacegroups[sg_name] = sg + + itc = IntTabCryst(spacegroups=new_spacegroups) + + itc.save_to_yaml( + "/workspaces/XRPD-Toolbox/src/xrpd_toolbox/utils/constants/international_tables_of_crystallography.yaml" + ) + + +class SpaceGroup(XRPDBaseModel): + spacegroup: str + crystal_class: str + hall: str + hermann_mauguin: str + symops: list[str] + ncsym: list[str] + number: int + schoenflies: str + universal_h_m: str + + # symop - full set + + # Use this for: + + # HKL reduction + # Laue symmetry + # structure factor + # systematic absences + # diffraction pattern + + # ncsym (non-centrosymmetric set) + # inversion symmetry is removed + # Used for: + + # anomalous scattering (f′, f″) + # Friedel pairs (hkl vs -hkl not equivalent) + # non-centrosymmetric analysis + # separating centrosymmetric vs non-centrosymmetric contributions + + def _normalise_symmetry_operations(self, symops): + """Convert symmetry operation strings to a consistent format for parsing.""" + ops = np.asarray(symops, dtype=str) + + # Normalize signs and remove leading '+' + ops = np.char.replace(ops, "-", "+-") + ops = np.char.replace(ops, "++", "+") + ops = np.char.lstrip(ops, "+") + + return ops + + def get_rotations_and_translations(self): + ops = self._normalise_symmetry_operations(self.symops) + + # Split into coordinates (N,3) + coords = np.char.split(ops, ",") + + # Split each coordinate into terms (e.g. "x+1/4" -> ["x", "+1/4"]) + terms = np.array([[c.split("+") for c in row] for row in coords], dtype=object) + + # --------------------------------- + # FLATTEN TERMS + # --------------------------------- + flat_terms = np.concatenate([t for row in terms for t in row]) + + # --------------------------------- + # IDENTIFY VARIABLES + # --------------------------------- + is_x = np.char.find(flat_terms, "x") >= 0 + is_y = np.char.find(flat_terms, "y") >= 0 + is_z = np.char.find(flat_terms, "z") >= 0 + + coeff = np.where(np.char.startswith(flat_terms, "-"), -1.0, 1.0) + + rx = np.where(is_x, coeff, 0.0) + ry = np.where(is_y, coeff, 0.0) + rz = np.where(is_z, coeff, 0.0) + + # --------------------------------- + # CONSTANT TERMS + # --------------------------------- + is_const = ~(is_x | is_y | is_z) + const_terms = np.where(is_const, flat_terms, "0") + const_terms = np.where(const_terms == "", "0", const_terms) + + frac = np.char.find(const_terms, "/") >= 0 + num = np.where(frac, np.char.partition(const_terms, "/")[:, 0], const_terms) + den = np.where(frac, np.char.partition(const_terms, "/")[:, 2], "1") + + const_vals = num.astype(float) / den.astype(float) + + # --------------------------------- + # REASSEMBLE + # --------------------------------- + split_sizes = np.array([len(t) for row in terms for t in row]) + idx = np.repeat(np.arange(len(split_sizes)), split_sizes) + + rx_sum = np.bincount(idx, weights=rx) + ry_sum = np.bincount(idx, weights=ry) + rz_sum = np.bincount(idx, weights=rz) + t_sum = np.bincount(idx, weights=const_vals) + + n_ops = len(ops) + + rotations = ( + np.stack([rx_sum, ry_sum, rz_sum], axis=1).reshape(n_ops, 3, 3).astype(int) + ) + translations = t_sum.reshape(n_ops, 3) % 1.0 + + return rotations, translations + + def apply_symmetry(self, xyz: np.ndarray) -> np.ndarray: + """take the symmetry operation of the space group and + applies them to the provides xyz fractional coordinations + must have xyz for every position shape = (n, 3)""" + + assert xyz.shape[-1] == 3 + + rotations, translations = self.get_rotations_and_translations() + + pos = ( + np.einsum("sij,aj->sai", rotations, xyz, optimize=True) + + translations[:, None, :] + ) % 1.0 + + return pos + + +class IntTabCryst(XRPDBaseModel): + """The international crystallographuc tables in digital format + The space groups are loaded from a yaml file + + Once intialised itc = IntTabCryst.load() + space groups can be accessed such as pnma = itc["Pnma"] + If space group requires a setting and none is provided + this will assume it's in the first setting""" + + spacegroups: dict[str, SpaceGroup] + + def __getitem__(self, spacegroup_name: str | int) -> SpaceGroup: + if isinstance(spacegroup_name, int): + sg_name = get_spacegroup_symbol(spacegroup_name) + else: + sg_name = spacegroup_name.replace(" ", "") + + sg = self.spacegroups.get(sg_name) + + if sg is None: + first_setting_sg_name = self._assume_first_setting(sg_name) + # print("Assuming first setting for space group:", first_setting_sg_name) + sg = self.spacegroups.get(first_setting_sg_name) + + if sg is None: + formatted_sg_name = format_space_group_name(sg_name) + # print(f"Trying formatted space group name: {formatted_sg_name}") + sg = self.spacegroups.get(formatted_sg_name) + + if sg is None: + formatted_sg_name = format_space_group_name(sg_name) + first_setting_formatted_sg_name = self._assume_first_setting( + formatted_sg_name + ) + # print( + # f"Trying formatted space group name in first setting: {first_setting_formatted_sg_name}" # noqa + # ) + sg = self.spacegroups.get(first_setting_formatted_sg_name) + + if sg is None: + print("Available space groups:", list(self.spacegroups.keys())) + raise KeyError(f"{spacegroup_name} not in ITC") + + return sg + + def __len__(self): + return len(self.spacegroups) + + def keys(self): + return self.spacegroups.keys() + + def values(self): + return self.spacegroups.values() + + def items(self): + return self.spacegroups.items() + + def _assume_first_setting(self, spacegroup_name): + return str(spacegroup_name) + ":1" + + @classmethod + def load(cls, filepath: str | Path | None = None) -> "IntTabCryst": + constants_folder = os.path.join(os.path.dirname(__file__), "constants") + + default_filepath = os.path.join( + constants_folder, "international_tables_of_crystallography.yaml" + ) + + return cls.load_from_yaml(filepath or default_filepath) + + +@lru_cache +def get_symmetry_tables(): + itc = IntTabCryst.load() + return itc + + +if __name__ == "__main__": + _convert_symmetry_operations_yaml() + + itc = get_symmetry_tables() + + print(itc.keys()) + + for i in range(1, 231): + print(i, itc[i].spacegroup, itc[i].crystal_class) + + # spacegroup = itc["P212121"] + # spacegroup = itc["P21"] + + # print(spacegroup) + + # positions = np.array([[0, 0, 0]]) + + # spacegroup.apply_symmetry(positions) + + # print(itc["P42/mnm"]) diff --git a/src/xrpd_toolbox/gui/__init__,py b/src/xrpd_toolbox/gui/__init__,py new file mode 100644 index 0000000..e69de29 diff --git a/src/xrpd_toolbox/gui/bad_pixel_gui.py b/src/xrpd_toolbox/gui/bad_pixel_gui.py new file mode 100644 index 0000000..b3f83a2 --- /dev/null +++ b/src/xrpd_toolbox/gui/bad_pixel_gui.py @@ -0,0 +1,475 @@ +import sys +from pathlib import Path + +import numpy as np +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg +from matplotlib.figure import Figure +from matplotlib.widgets import RectangleSelector +from PyQt6.QtCore import Qt +from PyQt6.QtGui import QKeySequence, QShortcut +from PyQt6.QtWidgets import ( + QApplication, + QFileDialog, + QHBoxLayout, + QLabel, + QListWidget, + QListWidgetItem, + QMainWindow, + QMessageBox, + QPushButton, + QSlider, + QSpinBox, + QTextEdit, + QVBoxLayout, + QWidget, +) + +from xrpd_toolbox.i11.mythen import MythenDataLoader +from xrpd_toolbox.utils.utils import load_int_array_from_file + +# ========================= +# Plot canvas +# ========================= + + +class PlotCanvas(FigureCanvasQTAgg): + def __init__( + self, + data: MythenDataLoader, + global_selected_indices: set[int], + selection_callback, + pixels_per_modules: int = 1280, + parent: QWidget | None = None, + ) -> None: + self.figure = Figure() + super().__init__(self.figure) + self.setParent(parent) + + self.ax = self.figure.add_subplot(111) + self._pan_start = None + + self.data = data + self.raw_data = data.data + self.pixels_per_modules = pixels_per_modules + + self.current_module = 0 + self.global_selected_indices = global_selected_indices + self.selection_callback = selection_callback + + self.x = np.arange(self.pixels_per_modules) + self.scatter = None + self.reference_curve = None + + self._connect_events() + self._plot_module(0) + + def _connect_events(self) -> None: + self.mpl_connect("scroll_event", self._on_scroll) + self.mpl_connect("button_press_event", self._on_click) + self.mpl_connect("motion_notify_event", self._on_mouse_move) + self.mpl_connect("button_release_event", self._on_mouse_release) + + def _plot_module(self, module: int) -> None: + self.ax.cla() + + start = module * self.pixels_per_modules + end = start + self.pixels_per_modules + curves = self.raw_data[:, start:end] + + for curve in curves: + self.ax.plot(self.x, curve, alpha=0.3, linewidth=1) + + self.reference_curve = curves[0] + + self.ax.set_title(f"Mythen Data — Module {module}") + self.ax.set_xlabel("Pixel (within module)") + self.ax.set_ylabel("Intensity (a.u.)") + + self.scatter = self.ax.scatter([], [], color="red", zorder=5) + self._update_selected_points() + + self._enable_rectangle_zoom() + self.ax.relim() + self.ax.autoscale() + self.draw_idle() + + def _enable_rectangle_zoom(self) -> None: + if hasattr(self, "rect_selector"): + self.rect_selector.disconnect_events() + + self.rect_selector = RectangleSelector( + self.ax, + self._on_rectangle_select, + useblit=True, + button=[1], # type: ignore + interactive=False, + props={"facecolor": "blue", "alpha": 0.2}, + ) + + def set_module(self, module: int) -> None: + self.current_module = module + self._plot_module(module) + + def reset_zoom(self) -> None: + self.ax.relim() + self.ax.autoscale() + self.draw_idle() + + def _on_scroll(self, event) -> None: + if event.xdata is None or event.ydata is None: + return + + zoom = 1.05 + factor = 1 / zoom if event.button == "up" else zoom + + x0, x1 = self.ax.get_xlim() + y0, y1 = self.ax.get_ylim() + + self.ax.set_xlim( + event.xdata - (x1 - x0) * factor / 2, + event.xdata + (x1 - x0) * factor / 2, + ) + self.ax.set_ylim( + event.ydata - (y1 - y0) * factor / 2, + event.ydata + (y1 - y0) * factor / 2, + ) + self.draw_idle() + + def _on_rectangle_select(self, eclick, erelease) -> None: + if eclick.xdata is None or erelease.xdata is None: + return + self.ax.set_xlim(sorted((eclick.xdata, erelease.xdata))) # type: ignore + self.ax.set_ylim(sorted((eclick.ydata, erelease.ydata))) # type: ignore + self.draw_idle() + + def _on_click(self, event) -> None: + if event.button == 3 and event.xdata is not None: + idx = int(round(event.xdata)) + if 0 <= idx < self.data.pixels_per_module: + global_idx = self.current_module * self.data.pixels_per_module + idx + self.selection_callback(global_idx) + + elif event.button == 2 and event.xdata is not None and event.ydata is not None: + self._pan_start = { + "x": event.xdata, + "y": event.ydata, + "xlim": self.ax.get_xlim(), + "ylim": self.ax.get_ylim(), + } + + def _on_mouse_move(self, event) -> None: + if self._pan_start is None or event.xdata is None or event.ydata is None: + return + + dx = event.xdata - self._pan_start["x"] + dy = event.ydata - self._pan_start["y"] + + x0, x1 = self._pan_start["xlim"] + y0, y1 = self._pan_start["ylim"] + + self.ax.set_xlim(x0 - dx, x1 - dx) + self.ax.set_ylim(y0 - dy, y1 - dy) + self.draw_idle() + + def _on_mouse_release(self, event) -> None: + if event.button == 2: + self._pan_start = None + + def _update_selected_points(self) -> None: + if self.scatter is None or self.reference_curve is None: + return + + start = self.current_module * self.pixels_per_modules + end = start + self.pixels_per_modules + + local = [ + idx - start for idx in self.global_selected_indices if start <= idx < end + ] + + if local: + x = self.x[local] + y = self.reference_curve[local] + self.scatter.set_offsets(np.column_stack((x, y))) + else: + self.scatter.set_offsets(np.empty((0, 2))) + + self.draw_idle() + + +# ========================= +# Main window +# ========================= + + +class MainWindow(QMainWindow): + def __init__(self, data: MythenDataLoader, initial_indices: set[int]) -> None: + super().__init__() + + self.setWindowTitle("Mythen NXS Viewer") + + self.data = data + self.global_selected_indices = initial_indices + self._current_save_path: Path | None = None + + # undo / redo + self.undo_stack: list[set[int]] = [] + self.redo_stack: list[set[int]] = [] + self.undo_limit = 20 + + self.canvas = PlotCanvas( + self.data, + self.global_selected_indices, + self._toggle_index, + ) + + self.list_widget = QListWidget() + + self.module_bad_pixels_box = QTextEdit() + self.module_bad_pixels_box.setReadOnly(True) + + self.module_count_label = QLabel() + self.global_count_label = QLabel() + + self.module_slider = QSlider(Qt.Orientation.Horizontal) + self.module_slider.setRange(0, self.data.n_modules_in_data - 1) + self.module_slider.valueChanged.connect(self._on_module_changed) + + self.reset_zoom_button = QPushButton("Reset Zoom") + self.reset_zoom_button.clicked.connect(self.canvas.reset_zoom) + + self.save_button = QPushButton("Save Selected Indices") + self.save_button.clicked.connect(self._save) + + self.n_spin = QSpinBox() + self.n_spin.setRange(1, self.data.pixels_per_module // 2) + self.n_spin.setValue(5) + + self.add_edges_button = QPushButton("Add First/Last N per Module") + self.add_edges_button.clicked.connect(self._add_edge_indices) + + self.undo_button = QPushButton("Undo") + self.undo_button.clicked.connect(self._undo) + + self.redo_button = QPushButton("Redo") + self.redo_button.clicked.connect(self._redo) + + # keyboard shortcuts + QShortcut(QKeySequence("Ctrl+Z"), self, activated=self._undo) # type: ignore + QShortcut(QKeySequence("Ctrl+Y"), self, activated=self._redo) # type: ignore + + self._setup_layout() + self._setup_menu() + self._sync_all() + + # ---------- UI ---------- + + def _setup_layout(self) -> None: + right = QVBoxLayout() + right.addWidget(QLabel("Selected Global Indices")) + right.addWidget(self.list_widget) + + right.addWidget(QLabel("Bad Pixels (Current Module, Global Indices)")) + right.addWidget(self.module_bad_pixels_box) + right.addWidget(self.module_count_label) + right.addWidget(self.global_count_label) + + edge_row = QHBoxLayout() + edge_row.addWidget(QLabel("N edge points per module")) + edge_row.addWidget(self.n_spin) + edge_row.addWidget(self.add_edges_button) + edge_row.addStretch() + right.addLayout(edge_row) + + undo_row = QHBoxLayout() + undo_row.addWidget(self.undo_button) + undo_row.addWidget(self.redo_button) + undo_row.addStretch() + right.addLayout(undo_row) + + right.addWidget(self.save_button) + + left = QVBoxLayout() + left.addWidget(self.canvas) + left.addWidget(self.module_slider) + left.addWidget(self.reset_zoom_button) + + central = QWidget() + main = QHBoxLayout(central) + main.addLayout(left, 3) + main.addLayout(right, 1) + + self.setCentralWidget(central) + + def _setup_menu(self) -> None: + menu = self.menuBar() + + if menu is None: + raise Exception("Menu has broken") + file_menu = menu.addMenu("File") + if file_menu is None: + raise Exception("file_menu has broken") + file_menu.addAction("Save", self._save) + file_menu.addAction("Save As...", self._save_as) + + help_menu = menu.addMenu("Help") + if help_menu is None: + raise Exception("help_menu has broken") + + help_menu.addAction("Controls", self._show_controls) + + # ---------- syncing ---------- + + def _sync_all(self) -> None: + self.list_widget.clear() + for idx in sorted(self.global_selected_indices): + self.list_widget.addItem(QListWidgetItem(str(idx))) + + self._update_module_bad_pixels() + self.global_count_label.setText( + f"Total bad pixels (global): {len(self.global_selected_indices)}" + ) + + def _update_module_bad_pixels(self) -> None: + m = self.canvas.current_module + ppm = self.data.pixels_per_module + start = m * ppm + end = start + ppm + + module_globals = sorted( + idx for idx in self.global_selected_indices if start <= idx < end + ) + + self.module_bad_pixels_box.setPlainText( + ", ".join(map(str, module_globals)) if module_globals else "(none)" + ) + self.module_count_label.setText(f"Bad pixels in module: {len(module_globals)}") + + # ---------- undo / redo ---------- + + def _record_state(self) -> None: + self.undo_stack.append(self.global_selected_indices.copy()) + if len(self.undo_stack) > self.undo_limit: + self.undo_stack.pop(0) + self.redo_stack.clear() + + def _undo(self) -> None: + if not self.undo_stack: + return + + self.redo_stack.append(self.global_selected_indices.copy()) + prev = self.undo_stack.pop() + + self.global_selected_indices.clear() + self.global_selected_indices.update(prev) + + self.canvas._update_selected_points() # noqa + self._sync_all() + + def _redo(self) -> None: + if not self.redo_stack: + return + + self.undo_stack.append(self.global_selected_indices.copy()) + nxt = self.redo_stack.pop() + + self.global_selected_indices.clear() + self.global_selected_indices.update(nxt) + + self.canvas._update_selected_points() # noqa + self._sync_all() + + # ---------- actions ---------- + + def _toggle_index(self, idx: int) -> None: + self._record_state() + + if idx in self.global_selected_indices: + self.global_selected_indices.remove(idx) + else: + self.global_selected_indices.add(idx) + + self.canvas._update_selected_points() # noqa + self._sync_all() + + def _add_edge_indices(self) -> None: + self._record_state() + + n = self.n_spin.value() + for m in range(self.data.n_modules_in_data): + base = m * self.data.pixels_per_module + for i in range(n): + self.global_selected_indices.add(base + i) + self.global_selected_indices.add( + base + self.data.pixels_per_module - 1 - i + ) + + self.canvas._update_selected_points() # noqa + self._sync_all() + + # ---------- save ---------- + + def _save(self) -> None: + if self._current_save_path is None: + self._save_as() + return + + with self._current_save_path.open("w", encoding="utf-8") as f: + for idx in sorted(self.global_selected_indices): + f.write(f"{idx}\n") + + def _save_as(self) -> None: + path_str, _ = QFileDialog.getSaveFileName( + self, "Save Indices", "", "Text Files (*.txt)" + ) + if not path_str: + return + + self._current_save_path = Path(path_str) + self._save() + + # ---------- help ---------- + + def _show_controls(self) -> None: + QMessageBox.information( + self, + "Controls", + "Right click: toggle bad pixel\n" + "Middle click + drag: pan\n" + "Scroll wheel: zoom\n" + "Left click + drag: rectangle zoom\n" + "Slider: change module\n" + "Ctrl+Z / Ctrl+Y: undo / redo", + ) + + def _on_module_changed(self, module: int) -> None: + self.canvas.set_module(module) + self._update_module_bad_pixels() + + +# ========================= +# Entrypoint +# ========================= + + +def run_bad_pixel_gui(filepath: str, indices_file: str | None = None) -> None: + data = MythenDataLoader(filepath) + + if indices_file: + initial_indices = set(load_int_array_from_file(indices_file)) + else: + initial_indices = set() + + app = QApplication(sys.argv) + win = MainWindow(data, initial_indices) + win.resize(1500, 900) + win.show() + win.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose, True) # optional + sys.exit(app.exec()) + + +if __name__ == "__main__": + DATA_FILE = "/workspaces/XRPD-Toolbox/examples/i11/step_scan/1410286.nxs" + + run_bad_pixel_gui( + DATA_FILE, + ) diff --git a/src/xrpd_toolbox/gui/reprocessor.py b/src/xrpd_toolbox/gui/reprocessor.py new file mode 100644 index 0000000..e69de29 diff --git a/src/xrpd_toolbox/gui/reprocessor_gui.py b/src/xrpd_toolbox/gui/reprocessor_gui.py new file mode 100644 index 0000000..94d79b5 --- /dev/null +++ b/src/xrpd_toolbox/gui/reprocessor_gui.py @@ -0,0 +1,389 @@ +import sys +import time +from pathlib import Path +from types import UnionType +from typing import Any, Literal, cast, get_args, get_origin + +from pydantic import ValidationError +from PyQt5.QtCore import QDir, Qt, QThread, pyqtSignal +from PyQt5.QtWidgets import ( + QAbstractItemView, + QApplication, + QCheckBox, + QComboBox, + QDoubleSpinBox, + QFileDialog, + QFileSystemModel, + QGridLayout, + QHBoxLayout, + QLabel, + QLineEdit, + QListWidget, + QListWidgetItem, + QMessageBox, + QPushButton, + QSpinBox, + QTreeView, + QVBoxLayout, + QWidget, +) + +from xrpd_toolbox.i11.mythen import MythenSettings + +# ========================= +# Worker Thread +# ========================= + + +class ProcessingWorker(QThread): + file_started = pyqtSignal(Path) + file_finished = pyqtSignal(Path) + file_failed = pyqtSignal(Path, str) + + def __init__(self, files: list[Path], settings: MythenSettings) -> None: + super().__init__() + self.files: list[Path] = files + self.settings: MythenSettings = settings + + def run(self) -> None: + for file in self.files: + self.file_started.emit(file) + try: + self.process_file(file) + self.file_finished.emit(file) + except Exception as exc: + self.file_failed.emit(file, str(exc)) + + def process_file(self, file: Path) -> None: + # Replace with real processing + time.sleep(1) + + +# ========================= +# Main Window +# ========================= + + +class MainWindow(QWidget): + def __init__( + self, + settings_path: str | Path | None = None, + settings: MythenSettings | None = None, + beamline: str = "i11", + settings_columns: int = 1, + ) -> None: + super().__init__() + + self.output_dir: str = str(Path.home()) + self.beamline = beamline + + self.settings_columns: int = max(1, settings_columns) + + if settings is not None: + self.settings_model: MythenSettings = settings + elif settings_path is not None: + self.settings_path: Path = Path(settings_path) + self.settings_model: MythenSettings = MythenSettings.load_from_toml( + settings_path + ) + else: + raise ValueError("Either settings or settings_path must be provided.") + + self.selected_files: list[Path] = [] + self.worker: ProcessingWorker | None = None + + self.widgets: dict[str, QWidget] = {} + + self.fs_model: QFileSystemModel + self.tree: QTreeView + self.file_list: QListWidget + self.settings_grid: QGridLayout + self.process_btn: QPushButton + + self.setWindowTitle("NXS Reprocessor") + self.resize(1200, 650) + + self.init_ui() + + # --------------------- + # UI setup + # --------------------- + + def init_ui(self) -> None: + main_layout = QHBoxLayout(self) + + # -------- LEFT PANEL -------- + left_layout = QVBoxLayout() + + self.fs_model = QFileSystemModel() + + self.base_path = f"/dls/{self.beamline}/data/" + + self.fs_model.setRootPath(QDir.rootPath()) + self.fs_model.setNameFilters(["*.nxs"]) + self.fs_model.setNameFilterDisables(False) + + self.tree = QTreeView() + self.tree.setModel(self.fs_model) + self.tree.setRootIndex(self.fs_model.index(self.base_path)) + self.tree.setSelectionMode(QAbstractItemView.ExtendedSelection) + + for col in range(1, self.fs_model.columnCount()): + self.tree.hideColumn(col) + + selection_model = self.tree.selectionModel() + if selection_model: + selection_model.selectionChanged.connect(self.on_selection_changed) + + self.file_list = QListWidget() + + left_layout.addWidget(self.tree) + left_layout.addWidget(self.file_list) + + # -------- RIGHT PANEL -------- + right_layout = QVBoxLayout() + + self.settings_grid = QGridLayout() + self.settings_grid.setHorizontalSpacing(20) + self.settings_grid.setVerticalSpacing(10) + + self.build_settings_grid() + + right_layout.addLayout(self.settings_grid) + right_layout.addStretch() + + self.process_btn = QPushButton("PROCESS") + self.process_btn.setStyleSheet( + "font-size: 18px; font-weight: bold; padding: 12px;" + ) + self.process_btn.clicked.connect(self.process) + + right_layout.addWidget(self.process_btn) + + main_layout.addLayout(left_layout, 2) + main_layout.addLayout(right_layout, 1) + + # --------------------- + # Settings grid + # --------------------- + + def build_settings_grid(self) -> None: + normal_settings: list[tuple[str, QWidget]] = [] + + model_class = type(self.settings_model) + + for setting_name, field in model_class.model_fields.items(): + setting_val = getattr(self.settings_model, setting_name) + annotation = field.annotation + # default = field.default + + widget = self.make_setting(setting_name, setting_val, annotation) + print("\n") + + normal_settings.append((setting_name, widget)) + + for i, (label, widget) in enumerate(normal_settings): + col = i % self.settings_columns + row = i // self.settings_columns + + label_col = col * 2 + field_col = label_col + 1 + + self.settings_grid.addWidget(QLabel(label), row, label_col) + self.settings_grid.addWidget(widget, row, field_col) + + output_row = ( + len(normal_settings) + self.settings_columns - 1 + ) // self.settings_columns + + output_name = "Output Directory" + self.settings_grid.addWidget(QLabel(output_name), output_row, 0) + self.settings_grid.addWidget( + self.make_dir_widget(output_name), + output_row, + 1, + 1, + self.settings_columns * 2 - 1, + ) + + # --------------------- + # Widget builders + # --------------------- + + def make_setting( + self, setting_name: str, setting_val: Any, annotation: Any + ) -> QWidget: + if (get_origin(annotation) is list) and (get_args(annotation) == (int,)): + w = QLineEdit() + w.setText(str(setting_val)) + self.widgets[setting_name] = w + return w + elif (get_origin(annotation) is UnionType) and (Path in get_args(annotation)): + w = QLineEdit() + w.setText(setting_val) + self.widgets[setting_name] = w + return w + elif get_origin(annotation) is Literal: + get_allowed_literals = get_args(annotation) + w = QComboBox() + w.addItems(get_allowed_literals) + w.setCurrentText(setting_val) + self.widgets[setting_name] = w + return w + elif annotation is float: + w = QDoubleSpinBox() + w.setRange(0.0, 1e9) + w.setDecimals(3) + w.setSingleStep(0.001) + w.setValue(setting_val) + self.widgets[setting_name] = w + return w + elif annotation is int: + w = QSpinBox() + w.setRange(1, 1_000_000) + w.setValue(setting_val) + self.widgets[setting_name] = w + return w + elif annotation is bool: + w = QCheckBox() + w.setChecked(setting_val) + self.widgets[setting_name] = w + return w + else: + raise ValueError(f"Unknown setting type: {setting_name}") + + def make_dir_widget(self, name) -> QWidget: + container = QWidget() + layout = QHBoxLayout(container) + layout.setContentsMargins(0, 0, 0, 0) + + edit = QLineEdit(self.output_dir) + browse = QPushButton("Browse…") + browse.clicked.connect(self.browse_output_dir) + + layout.addWidget(edit) + layout.addWidget(browse) + + self.widgets[name] = edit + return container + + # --------------------- + # Output directory picker + # --------------------- + + def browse_output_dir(self) -> None: + edit = cast(QLineEdit, self.widgets["output_dir"]) + directory = QFileDialog.getExistingDirectory( + self, + "Select Output Directory", + edit.text() or str(Path.home()), + ) + if directory: + edit.setText(directory) + + # --------------------- + # File selection + # --------------------- + + def on_selection_changed(self, *_: object) -> None: + self.selected_files.clear() + self.file_list.clear() + + selection_model = self.tree.selectionModel() + if selection_model is None: + return + indexes = selection_model.selectedIndexes() + seen: set[Path] = set() + + for index in indexes: + if index.column() != 0: + continue + + path = Path(self.fs_model.filePath(index)) + if path.is_file() and path.suffix == ".nxs" and path not in seen: + seen.add(path) + self.selected_files.append(path) + + item = QListWidgetItem(f"⏳ {path.name}") + item.setData(int(Qt.ItemDataRole.UserRole), path) + self.file_list.addItem(item) + + # --------------------- + # Collect settings + # --------------------- + + def collect_settings(self) -> MythenSettings: + return MythenSettings( + # threshold=cast(QDoubleSpinBox, self.widgets["threshold"]).value(), + # max_iterations=cast(QSpinBox, self.widgets["max_iterations"]).value(), + # normalize=cast(QCheckBox, self.widgets["normalize"]).isChecked(), + # output_dir=cast(QLineEdit, self.widgets["output_dir"]).text(), + ) + + # --------------------- + # Process + # --------------------- + + def process(self) -> None: + if not self.selected_files: + QMessageBox.warning(self, "No files", "Select at least one .nxs file.") + return + + try: + settings = self.collect_settings() + except ValidationError as exc: + QMessageBox.critical(self, "Invalid settings", str(exc)) + return + + self.process_btn.setEnabled(False) + + self.worker = ProcessingWorker(self.selected_files, settings) + self.worker.file_started.connect(self.on_file_started) + self.worker.file_finished.connect(self.on_file_finished) + self.worker.file_failed.connect(self.on_file_failed) + self.worker.finished.connect(self.on_all_done) + self.worker.start() + + # --------------------- + # Worker callbacks + # --------------------- + + def find_item(self, path: Path) -> QListWidgetItem | None: + for i in range(self.file_list.count()): + item = self.file_list.item(i) + if item is not None and item.data(Qt.ItemDataRole.UserRole) == path: + return item + return None + + def on_file_started(self, path: Path) -> None: + item = self.find_item(path) + if item: + item.setText(f"🔄 {path.name}") + + def on_file_finished(self, path: Path) -> None: + item = self.find_item(path) + if item: + item.setText(f"✅ {path.name}") + + def on_file_failed(self, path: Path, error: str) -> None: + item = self.find_item(path) + if item: + item.setText(f"❌ {path.name}") + + print(f"Error processing {path}: {error}") + + def on_all_done(self) -> None: + self.process_btn.setEnabled(True) + QMessageBox.information(self, "Done", "All files processed.") + + +# ========================= +# App entry point +# ========================= + +if __name__ == "__main__": + app = QApplication(sys.argv) + settings = MythenSettings() + window = MainWindow(settings=settings, settings_columns=1) + window.show() + sys.exit(app.exec_()) diff --git a/src/xrpd_toolbox/gui/waffle.py b/src/xrpd_toolbox/gui/waffle.py new file mode 100644 index 0000000..7098cee --- /dev/null +++ b/src/xrpd_toolbox/gui/waffle.py @@ -0,0 +1,117 @@ +import sys + +from PyQt6.QtCore import QSize +from PyQt6.QtWidgets import ( + QApplication, + QComboBox, + QGridLayout, + QLabel, + QMessageBox, + QPushButton, + QVBoxLayout, + QWidget, +) + +from xrpd_toolbox.gui.bad_pixel_gui import run_bad_pixel_gui + +# Constants +BEAMLINES: list[str] = ["i11", "i15-1"] + + +class WaffleGUI(QWidget): + """Main waffle GUI with square buttons that resize dynamically""" + + def __init__(self, beamline: str, grid_size: int = 3) -> None: + super().__init__() + self.beamline: str = beamline + self.grid_size: int = grid_size + self.setWindowTitle(f"{beamline} Modules") + self.setMinimumSize(300, 300) # Prevent uncontrolled expansion + + self.layout: QGridLayout = QGridLayout() # type: ignore + self.layout.setSpacing(5) + self.buttons: list[QPushButton] = [] + + # Create NxN waffle buttons + for row in range(grid_size): + for col in range(grid_size): + idx: int = row * grid_size + col + btn: QPushButton = QPushButton(f"Module {idx}") + btn.clicked.connect(lambda checked: self.launch_module(idx)) # type: ignore # noqa + self.layout.addWidget(btn, row, col) + self.buttons.append(btn) + + self.setLayout(self.layout) + + # Force initial square sizing + self.adjust_button_sizes() + + def resizeEvent(self, event) -> None: # type: ignore # noqa + """Keep buttons square when window resizes""" + self.adjust_button_sizes() + super().resizeEvent(event) + + def adjust_button_sizes(self) -> None: + """Compute max square size that fits the grid""" + if not self.buttons: + return + # total spacing between buttons + spacing: int = self.layout.spacing() * (self.grid_size - 1) + available_width: int = self.width() - spacing + available_height: int = self.height() - spacing + button_size: int = min(available_width, available_height) // self.grid_size + for btn in self.buttons: + btn.setFixedSize(QSize(button_size, button_size)) + + def launch_module(self, idx: int) -> None: + """Open submodule GUI (placeholder)""" + # sub_gui: SubmoduleGUI = SubmoduleGUI(f"Module {idx}") + # sub_gui.show() + # # Keep a reference so it doesn't get garbage collected + # sub_gui.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose, True) + + data_file = "/workspaces/XRPD-Toolbox/examples/i11/step_scan/1406731.nxs" + + run_bad_pixel_gui(data_file) + + +class BeamlineSelector(QWidget): + """Initial beamline selection GUI""" + + def __init__(self) -> None: + super().__init__() + self.setWindowTitle("Select Beamline") + self.setGeometry(100, 100, 300, 150) + + self.waffle_gui: WaffleGUI | None = None + + layout: QVBoxLayout = QVBoxLayout() + label: QLabel = QLabel("Select beamline:") + self.combo: QComboBox = QComboBox() + self.combo.addItems(BEAMLINES) + + self.confirm_btn: QPushButton = QPushButton("Confirm") + self.confirm_btn.clicked.connect(self.confirm_selection) + + layout.addWidget(label) + layout.addWidget(self.combo) + layout.addWidget(self.confirm_btn) + self.setLayout(layout) + + def confirm_selection(self) -> None: + beamline: str = self.combo.currentText() + if beamline not in BEAMLINES: + QMessageBox.warning(self, "Error", "Please select a valid beamline.") + return + + # Open waffle GUI + self.waffle_gui = WaffleGUI(beamline) + self.waffle_gui.show() + self.close() # close the selector + + +if __name__ == "__main__": + app: QApplication = QApplication(sys.argv) + selector: BeamlineSelector = BeamlineSelector() + selector.show() + sys.exit(app.exec()) diff --git a/src/xrpd_toolbox/i11/angular_calibration.py b/src/xrpd_toolbox/i11/angular_calibration.py new file mode 100644 index 0000000..2384249 --- /dev/null +++ b/src/xrpd_toolbox/i11/angular_calibration.py @@ -0,0 +1,1236 @@ +# type: ignore +import json +import os +import pickle +from collections.abc import Collection + +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import peakutils +from h5py import File as h5pyFile +from lmfit import Parameters, minimize, report_fit +from pyFAI.calibrant import get_calibrant +from scipy.interpolate import interp1d + +from xrpd_toolbox.i11.mythen import ( + AngularCalibration, + MythenDetector, + MythenSettings, +) +from xrpd_toolbox.i11.mythen3_reduction_legacy import I11Reduction +from xrpd_toolbox.utils.utils import load_int_array_from_file, rebin_together + + +def top_n_recurring(arr, n): + arr = np.array(arr) + # Get unique values and their counts + unique_vals, counts = np.unique(arr, return_counts=True) + + # Sort by counts descending + sorted_indices = np.argsort(counts)[::-1] + + # Select top n + top_n = unique_vals[sorted_indices][:n] + + return top_n + + +def paired_modules(): + """ + Given a list of module numbers, return a list of (a, b) pairs such that + a and b are paired as described: 0-27, 1-26, 2-25, ..., 13-14. + Only pairs where both a and b are in the input list are returned. + """ + + modules = list(range(28)) + + modules = np.array(modules) + n = modules.max() + pairs = [] + for m in modules: + pair = n - m + if pair in modules and m <= pair: + pairs.append((int(m), int(pair))) + + pairs = np.array(pairs) + + return pairs + + +def calc_starting_module_offset(initial_module=0.45, offset=2.5): + """Used for calculatign the intial centres of each of the modules""" + + module_pairs = paired_modules() + module_offsets_dict = {} + + for n, module_pair in enumerate(module_pairs[::-1]): + print(module_pair) + + ring_2_cen = (n * 5) + initial_module + ring_1_cen = ring_2_cen + offset + + module_offsets_dict[int(module_pair[1])] = ring_2_cen + module_offsets_dict[int(module_pair[0])] = ring_1_cen + + print(module_offsets_dict) + + return module_offsets_dict + + +def index_of_closest(arr, value): + """ + Return the index of the closest value in arr to the given value. + """ + arr = np.asarray(arr) + idx = np.abs(arr - value).argmin() + return idx + + +def calc_intial_module_conv(conv=6.5e-05): + module_conv_dict = {} + + for mod in range(28): + if mod > 13: + module_conv_dict[mod] = -conv + else: + module_conv_dict[mod] = conv + + return module_conv_dict + + +def gaussian(x: np.array, cen: float, amp: float, fwhm: float): + # "1-d gaussian: gaussian(x, amp, cen, fwhm)" + + return (amp / (np.sqrt(2 * np.pi) * fwhm)) * np.exp( + -((x - cen) ** 2) / (2 * fwhm**2) + ) + + +def multi_gaussian(x: np.array, peaks, background=0, phase_scale=1, wdt: int = 4): + """wdt (range) of calculated profile of a single Bragg reflection in units of FWHM + (typically 4 + for Gaussian and 20-30 for Lorentzian, 4-5 for TOF). + + peaks: list of (cen, amp, fwhm) + + background: scalar or array + """ + + y = np.zeros_like(x) + background + + for peak in peaks: + cen, amp, fwhm = peak + start_idx = np.searchsorted(x, cen - wdt) + end_idx = np.searchsorted(x, cen + wdt, side="right") + + xi = x[start_idx:end_idx] + peak = gaussian(xi, cen, amp, fwhm) * phase_scale + + y[start_idx:end_idx] += peak + + return y + + +class AngularCalibrateMythen: + def split_into_modules( + self, + filespaths: list[str], + modules: Collection[int] = tuple(range(28)), + bad_channels: Collection[int] = (), + ): + n_modules = len(modules) + + out_filepaths = [] + + for filepath in filespaths: + with h5pyFile(filepath, "r") as file: + entry = file["entry"] + + delta = entry["mythen_nx"]["delta"] + + filename = os.path.basename(filepath) + filenumber = filename.replace(".nxs", "") + + n_delta_points = delta.shape[0] + + module_array = np.zeros( + (n_delta_points, n_modules, self.STRIPS_PER_MODULE) + ) + + for i in range(delta.shape[0]): + print(f"File: {filepath}, Frame: {i}, Delta: {delta[i]}") + + data = entry["mythen_nx"]["data"][i, :, self.DEFAULT_COUNTER] + + data[bad_channels] = 0 + + split_module_data = np.split(data, n_modules) + + for n_mod in modules: + module_data = split_module_data[n_mod] + + # if n_mod > 13: + # module_data = np.flip(module_data) + + module_array[i, n_mod, :] = module_data + + out_filepath = os.path.join( + "/host-home/projects/outputs", + filenumber + "_modules.h5", + ) + out_filepaths.append(out_filepath) + + with h5pyFile(out_filepath, "w", libver="latest") as h5f: + h5f["data1"] = module_array + + return out_filepaths + + def generate_filepaths(self, data_dir, nexus_file_numbers): + filepaths = [] + + for data_file_number in nexus_file_numbers: + filepath = os.path.join(data_dir, f"{data_file_number}.nxs") + filepaths.append(filepath) + + return filepaths + + def extract_module_dataset(self, module_to_analyse: int, delta_points): + module_datasets = [] + + with h5pyFile(self.module_dataset, "r") as file: + nxs_data = file["data1"] # (delta, n_modules, PIXELS_PER_MODULE) + + for n_delta, _ in enumerate(delta_points): + module_data = nxs_data[n_delta, module_to_analyse, :] + module_datasets.append(module_data) + + module_datasets = np.array(module_datasets) + + return module_datasets + + def average_within_tolerance(self, arr, tol): + """ + For a 1D numpy array, if two adjacent values are within 'tol', + replace them with their average + and remove one of them, so the returned array is shorter. + No explicit Python loops. + """ + arr = np.asarray(arr, dtype=float) + if arr.size == 0: + return arr + + arr = np.sort(arr) # Ensure the array is sorted at the beginning + + # Find adjacent pairs within tolerance + close = np.abs(arr[1:] - arr[:-1]) <= tol + + # Indices to keep: start with all True + keep = np.ones(arr.shape, dtype=bool) + # Where close, we'll keep only the first of the pair (set the second to False) + keep[1:][close] = False + + # Compute averages for close pairs + avgs = (arr[:-1][close] + arr[1:][close]) / 2 + + # Output array: fill with arr, then replace the kept + # indices that start a close pair with the average + out = arr[keep] + out_indices = np.where(close)[0][keep[:-1][close]] + out[out_indices] = avgs + + return out + + def fit_peaks_across_delta( + self, + delta_points, + module_angular_cal, + modules, + observed_reflections_in_tth, + beamline_offset, + ): + fitted_peaks_for_modules = {} + big_df = pd.DataFrame() + + for module_to_analyse in modules: + module_dataset = self.extract_module_dataset( + module_to_analyse=module_to_analyse, delta_points=delta_points + ) + params = module_angular_cal[module_to_analyse] + + centre = params["centre"] + conv = params["conv"] + offset = params["offset"] + + module_pixel_number = np.arange(self.STRIPS_PER_MODULE, dtype=np.int64) + + raw_tth = I11Reduction.channel_to_angle( + module_pixel_number, centre, conv, offset, beamline_offset + ) + + tol = 0.01 + trim = 10 + + calc_peak_tth = np.array([]) + detected_peak_pixel = np.array([]) + delta_of_point = np.array([]) + + for n, (delta, dataset) in enumerate( + zip(delta_points, module_dataset, strict=True) + ): + print(module_to_analyse, n, delta) + + dataset[0:trim] = np.nan + dataset[len(dataset) - trim : :] = np.nan + # dataset = dataset[trim:-trim] + mask = dataset == 0 + + real_tth = raw_tth + delta + real_tth[0:trim] = np.nan + real_tth[len(dataset) - trim : :] = np.nan + + dataset[mask] = np.nan + real_tth[mask] = np.nan + + data_tth_mean = np.nanmean(real_tth) + + mintth, maxtth = np.nanmin(real_tth), np.nanmax(real_tth) + + tth_calculated_peak_centres = observed_reflections_in_tth[ + (maxtth + tol > observed_reflections_in_tth) + & (observed_reflections_in_tth > mintth - tol) + ] + tth_calculated_peak_centres = np.sort(tth_calculated_peak_centres) + + if ( + len(tth_calculated_peak_centres) > 0 + ): # if there are peaks as detected by calculation from cif + if (len(tth_calculated_peak_centres) > 1) and self.single_peak: + middle_index = self.closest_indices( + data_tth_mean, tth_calculated_peak_centres + ) + tth_calculated_peak_centres = np.array( + [tth_calculated_peak_centres[middle_index]] + ) + + non_nan_dataset = np.nan_to_num(dataset) + + indexes = peakutils.indexes( + non_nan_dataset, thres=0.10, min_dist=100 + ) + tth_peaks_centres_in_data = real_tth[indexes] + pixel_peak_in_data = module_pixel_number[indexes] + + n_calc, n_data = ( + len(tth_calculated_peak_centres), + len(tth_peaks_centres_in_data), + ) + + if n_data > n_calc: + # if extra peaks are detected then clean it up + # by taking the closest ones + index = self.closest_indices( + tth_calculated_peak_centres, tth_peaks_centres_in_data + ) + tth_peaks_centres_in_data = tth_peaks_centres_in_data[index] + pixel_peak_in_data = pixel_peak_in_data[index] + n_calc, n_data = ( + len(tth_calculated_peak_centres), + len(tth_peaks_centres_in_data), + ) + + real_tth_no_nan = raw_tth + delta + tth_peaks_centres_in_data_refined = peakutils.interpolate( + real_tth_no_nan, non_nan_dataset, ind=pixel_peak_in_data + ) + + interp_func = interp1d(real_tth_no_nan, module_pixel_number) + + try: + pixel_peak_in_data_refined = interp_func( + tth_peaks_centres_in_data_refined + ) + + if ( + abs( + tth_peaks_centres_in_data_refined + - tth_peaks_centres_in_data + ) + < 0.4 + ): + pixel_peak_in_data = ( + pixel_peak_in_data_refined.flatten() + ) + n_calc, n_data = ( + len(tth_calculated_peak_centres), + len(tth_peaks_centres_in_data), + ) + else: + continue + + except Exception as e: + pixel_peak_in_data_refined = tth_peaks_centres_in_data + print(e) + try: + if ( + abs( + tth_peaks_centres_in_data_refined + - tth_peaks_centres_in_data + ) + > 0.4 + ): + continue + except Exception as e: + print(e) + continue + + # if ( + # (n % 1 == 0) + # and (n > 29) + # and (n < 41) + # and (module_to_analyse in [5]) + # ): + # plt.plot(real_tth, non_nan_dataset) + # plt.scatter( + # tth_peaks_centres_in_data, + # non_nan_dataset[pixel_peak_in_data.astype(int)], + # color="red", + # ) + # plt.show() + + if ( + n_calc != n_data + ): # if still not equal - why? (peak probably on edge of data) + continue + + calc_peak_tth = np.append( + calc_peak_tth, tth_calculated_peak_centres + ) + detected_peak_pixel = np.append( + detected_peak_pixel, pixel_peak_in_data + ) + delta_of_point = np.append( + delta_of_point, [delta] * len(tth_calculated_peak_centres) + ) + + continue + + else: # if there are no peaks in this range skip + continue + + # if module_to_analyse in [5]: + # plt.ylabel("Intensity (A.U)") + # plt.xlabel("tth") + + module_data = pd.DataFrame() + module_data["calc_peak_tth"] = calc_peak_tth + module_data["pixel"] = detected_peak_pixel + module_data["delta"] = delta_of_point + module_data["module"] = module_to_analyse + + big_df = pd.concat((big_df, module_data)) + + # print(len(module_data)) + + # print(len(module_data)) + + # mask = np.isclose( + # module_data["calc_peak_tth"].to_numpy()[:, None], # shape (rows, 1) + # self.peaks_to_fit, # shape (n,) + # rtol=1e-5, + # atol=1e-8, + # ).any(axis=1) + + # mask = module_data["delta"] < 25 + + # module_data = module_data[mask] + + # print(len(module_data)) + + # module_data.to_csv(f"/workspaces/{module_to_analyse}.csv") + + # median_tth = np.median(calc_peak_tth) + + # module_data = module_data[ + # (module_data["calc_peak_tth"] > median_tth - 0.2) + # & (module_data["calc_peak_tth"] < median_tth + 0.2) + # ] + + # it's a dict + fitted_peaks_for_modules[module_to_analyse] = module_data + + for peak in np.unique(big_df["calc_peak_tth"]): + peak_data = big_df[big_df["calc_peak_tth"] == peak] + + print(peak, "(tth)") + print(len(np.unique(peak_data["module"])), "\n") + + return fitted_peaks_for_modules + + def return_residual_for_modules( + self, params, modules, fitted_peaks_for_modules, ring_compare=False, plot=False + ): + params = params.valuesdict() + + resid_for_all_modules = np.array([]) + + for _, (module_to_analyse) in enumerate(modules): + module_dataframe = fitted_peaks_for_modules[module_to_analyse] + + centre = params[f"centre_{module_to_analyse}"] + beamline_offset = params["beamline_offset"] + conv = params[f"conv_{module_to_analyse}"] + offset = params[f"offset_{module_to_analyse}"] + + raw_tth = I11Reduction.channel_to_angle( + module_dataframe["pixel"], centre, conv, offset, beamline_offset + ) + + real_tth = raw_tth + module_dataframe["delta"] + diff = np.abs(real_tth - module_dataframe["calc_peak_tth"]) + # mmultiplying by mean weights the lower agnles greater than higher + # excess = np.clip(diff - 0.002, 0, None) + # resid_for_module = excess**2 * 1000 + + # max_dist = 13.5 + + # distance = abs(module_to_analyse - 14) + # normalised = 1 - (distance / max_dist) + + # resid_for_module = diff * ((normalised) * 100) + resid_for_module = diff + + resid_for_all_modules = np.append(resid_for_all_modules, resid_for_module) + resid_for_module_iter = float(np.nansum(resid_for_module)) + # print(resid_for_module_iter) + # print(module_to_analyse) + self.resid_per_module[module_to_analyse].append(resid_for_module_iter) + + if plot and (self.plot_iter % 200 == 0): + print(module_to_analyse) + plt.scatter(real_tth, [1] * len(real_tth), label="det") + plt.scatter( + module_dataframe["calc_peak_tth"], + [2] * len(module_dataframe), + label="calc", + ) + plt.legend() + plt.show() + + if ring_compare: + for bad_mod in self.bad_modules: + params[f"conv_{bad_mod}"] = self.module_angular_cal[bad_mod]["conv"] + params[f"offset_{bad_mod}"] = self.module_angular_cal[bad_mod]["offset"] + params[f"centre_{bad_mod}"] = self.module_centre + + pydantic_dict = self.results_dict_to_pydantic(params) + angular_calibration = AngularCalibration(**pydantic_dict) + + config_file = "/host-home/projects/outputs/mythen_calibration/mythen3_reduction_config.toml" # noqa + settings1 = MythenSettings.load_from_toml(config_file) + settings2 = MythenSettings.load_from_toml(config_file) + + bad_chan_file = "/workspaces/XRPD-Toolbox/config/i11/bad_channels.txt" + + data_file = "/host-home/projects/outputs/angular_calibration/1410289.nxs" + settings1.bad_channels_filepath = bad_chan_file + settings2.bad_channels_filepath = bad_chan_file + + settings1.bad_modules = [ + 11, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + ] + settings2.bad_modules = [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 17, + 27, + ] # type: ignore + + mythen3_ring_1 = MythenDetector( + filepath=data_file, + settings=settings1, + angular_calibration=angular_calibration, + ) + + tth1, count1, error1 = mythen3_ring_1.generate_binned_xye(normalise=False) + + mythen3_ring_2 = MythenDetector( + filepath=data_file, + settings=settings2, + angular_calibration=angular_calibration, + ) + + tth2, count2, error2 = mythen3_ring_2.generate_binned_xye(normalise=False) + + x_common, y1_interp, y2_interp = rebin_together(tth1, count1, tth2, count2) + + ring_compare = np.abs(y1_interp - y2_interp) + ring_compare_resid = np.sum(ring_compare) / (1e9) + + resid_for_all_modules = resid_for_all_modules + ring_compare_resid + + print(np.sum(resid_for_all_modules), np.sum(ring_compare)) + self.plot_iter = self.plot_iter + 1 + + return resid_for_all_modules + + def get_delta_points(self, filepath): + with h5pyFile(filepath, "r") as file: + entry = file["entry"] + delta_points = entry["mythen_nx"]["delta"][()] + + return delta_points + + def save_results( + self, results_dict, filepath, modules, bad_modules, original_ang_cal, p=0.05 + ): + for key in results_dict.keys(): + if "conv" in key: + print(key, results_dict[key]) + else: + print(key, results_dict[key]) + + with open(filepath, "w") as f: + for module in modules: + if module in bad_modules: + og_off = original_ang_cal[module]["offset"] + og_conv = original_ang_cal[module]["conv"] + og_centre = self.module_centre + + f.write( + f"module {module} offset {og_off} conv {og_conv} center {og_centre} #not refined\n" # noqa + ) + + else: + off = results_dict[f"offset_{module}"] + conv = results_dict[f"conv_{module}"] + center = results_dict[f"centre_{module}"] + + f.write( + f"module {module} offset {off} conv {conv} center {center} \n" + ) + + beamline_offset = results_dict["beamline_offset"] + + f.write(f"beamline_offset {beamline_offset}") + + with open(filepath.replace(".off", ".json"), "w") as fp: + json.dump(results_dict, fp, indent=4) + + print(f"Saved to: {filepath}") + + def plot_resids(self): + for module in self.resid_per_module.keys(): + mod_resids = self.resid_per_module[module] + plt.title(module) + plt.plot(np.log10(mod_resids)) + plt.show() + + def create_starting_params(self, zero=-0.5): + conv_tol = 0.2 # fractional percent 0.1 = 10% + offset_tol = 4 # in degrees + + convs = calc_intial_module_conv(0.05 / 762) + offsets = calc_starting_module_offset() + + params = Parameters() + + for mod in self.good_modules: + init_conv = convs[mod] + init_offset = offsets[mod] + + conv_lower = init_conv - ((abs(init_conv)) * conv_tol) + conv_upper = init_conv + ((abs(init_conv)) * conv_tol) + + print(mod, init_offset, init_conv, conv_lower, conv_upper) + + params.add( + f"conv_{mod}", + vary=True, + value=init_conv, + min=conv_lower, + max=conv_upper, + ) + params.add( + f"offset_{mod}", + vary=True, + value=init_offset, + min=init_offset - offset_tol, + max=init_offset + offset_tol, + ) + + params.add( + f"centre_{mod}", + value=self.module_centre, + vary=False, + min=self.module_centre - 2, + max=self.module_centre + 2, + ) # maybe 640 or 639.5? + + params.add("beamline_offset", value=zero, vary=True, min=-2, max=2) + + return params + + def plot_fit_stats(self, fitted_peaks_for_modules): + peak_fits = pd.DataFrame( + columns=["peak"].append(list(fitted_peaks_for_modules.keys())) + ) + + peak_fits["peak"] = self.peaks_to_fit + + for module in fitted_peaks_for_modules.keys(): + module_data = fitted_peaks_for_modules[module] + plt.title(module) + # plt.scatter(module_data["delta"], module_data["pixel"]) + + mask = np.isclose( + module_data["calc_peak_tth"].to_numpy()[:, None], # shape (rows, 1) + self.peaks_to_fit, # shape (n,) + rtol=1e-5, + atol=1e-8, + ).any(axis=1) + + module_data = module_data[mask] + + peak_data_gradient = [] + + for peak in np.unique(module_data["calc_peak_tth"]): + peak_in_module = module_data[module_data["calc_peak_tth"] == peak] + plt.scatter(peak_in_module["delta"], peak_in_module["pixel"]) + + m, b = np.polyfit( + peak_in_module["delta"].to_numpy(), + peak_in_module["pixel"].to_numpy(), + 1, + ) + print(m, b) + peak_data_gradient.append(m) + + plt.plot( + peak_in_module["delta"], + (m * peak_in_module["delta"]) + b, + color="red", + ) + peak_fits[str(module)] = peak_data_gradient + plt.savefig(f"/host-home/projects/outputs/peak_fits_{module}.png") + plt.close() + + mean_grads = [] + + plt.figure(figsize=(16, 10)) + plt.title("Absolute Gradient of Fitted Peaks") + for module in fitted_peaks_for_modules.keys(): + mean_gradient = np.mean(peak_fits[str(module)]) + print(module, mean_gradient) + mean_grads.append(mean_gradient) + + # for module in fitted_peaks_for_modules.keys(): + # gradients = peak_fits[str(module)] + # plt.title(module) + # plt.plot(self.peaks_to_fit, gradients) + # plt.show() + + plt.errorbar( + list(fitted_peaks_for_modules.keys()), + np.abs(mean_grads), + np.std(np.abs(mean_grads)), + fmt="-o", + ) + plt.ylabel("Mean Gradient Of Peak Fit pixel/delta") + plt.xlabel("Module number") + plt.grid(True) + plt.savefig("/host-home/projects/outputs/gradient.png") + plt.close() + + peak_fits.to_csv("/host-home/projects/outputs/peak_gradients.csv") + + def remove_bad_modules(self, fitted_peaks_for_modules: dict): + for bad_module in self.bad_modules: + fitted_peaks_for_modules.pop(bad_module) + + return fitted_peaks_for_modules + + def select_peaks(self, fitted_peaks_for_modules, mask_type: str = "select_peaks"): + for module in fitted_peaks_for_modules.keys(): + module_data = fitted_peaks_for_modules[module] + + print(module, "unique peaks", np.unique(module_data["calc_peak_tth"])) + print(len(module_data)) + + if mask_type == "select_peaks": + mask = np.isclose( + module_data["calc_peak_tth"].to_numpy()[:, None], # shape (rows, 1) + self.peaks_to_fit, # shape (n,) + rtol=1e-5, + atol=1e-8, + ).any(axis=1) + + elif mask_type == "below": + if module not in [12, 13, 14, 15, 16]: + mask = module_data["delta"] < 25 + else: + mask = module_data["delta"] < 50 + + elif mask_type == "below2": + distance = abs(module_distance(module)) + + if distance > 0.7: + distance = distance + else: + distance = 0 + + mask = module_data["delta"] < 25 + (25 * distance) + + elif mask_type == "max": + max_n = 5 + most_present_peaks = top_n_recurring( + module_data["calc_peak_tth"], max_n + ) + mask = np.isclose( + module_data["calc_peak_tth"].to_numpy()[:, None], # shape (rows, 1) + most_present_peaks, # shape (n,) + rtol=1e-5, + atol=1e-8, + ).any(axis=1) + elif mask_type == "between": + mask = (module_data["delta"] < self.upper_delta) & ( + module_data["delta"] > self.lower_delta + ) + + module_data = module_data[mask] + print(len(module_data)) + # it's a dict + fitted_peaks_for_modules[module] = module_data + + return fitted_peaks_for_modules + + def results_dict_to_pydantic(self, results_dict): + pydantic_dict = {} + pydantic_dict["beamline_offset"] = results_dict["beamline_offset"] + + for module in self.active_modules: + pydantic_dict[f"module_{str(module)}"] = { + "centre": results_dict[f"centre_{module}"], + "conv": results_dict[f"conv_{module}"], + "offset": results_dict[f"offset_{module}"], + } + + return pydantic_dict + + def create_starting_params_from_original(self, starting_params, beamline_offset): + conv_tol = 0.2 # fractional percent 0.1 = 10% + offset_tol = 4 # in degrees + + params = Parameters() + + for mod in self.good_modules: + init_conv = starting_params[mod]["conv"] + init_offset = starting_params[mod]["offset"] + + conv_lower = init_conv - ((abs(init_conv)) * conv_tol) + conv_upper = init_conv + ((abs(init_conv)) * conv_tol) + + print(mod, init_offset, init_conv, conv_lower, conv_upper) + + params.add( + f"conv_{mod}", + vary=True, + value=init_conv, + min=conv_lower, + max=conv_upper, + ) + params.add( + f"offset_{mod}", + vary=True, + value=init_offset, + min=init_offset - offset_tol, + max=init_offset + offset_tol, + ) + + params.add( + f"centre_{mod}", + value=self.module_centre, + vary=True, + min=self.module_centre - 5, + max=self.module_centre + 5, + ) # maybe 640 or 639.5? + + params.add("beamline_offset", value=beamline_offset, vary=True, min=-2, max=2) + + return params + + def __init__( + self, + wavelength_in_ang, + method, + module_centre=640, + lower_delta=0, + upper_delta=90, + ): + self.DEFAULT_COUNTER = 0 + self.STRIPS_PER_MODULE = 1280 + self.wavelength_in_ang = wavelength_in_ang + self.method = method + + self.lower_delta = lower_delta + self.upper_delta = upper_delta + + self.active_modules = list(range(28)) + self.bad_modules = [ + 17, + ] # 11 is wobbling?, 17 is dead, 27 is wobbling? + self.good_modules = [ + f for f in self.active_modules if f not in self.bad_modules + ] + + self.peaks_to_fit = [ + 69.6350914079859, + 71.75570444785892, + 75.23501956270378, + 77.29530751474618, + 80.69374073239572, + 82.71626960778555, + 86.06823060567002, + 88.07221803978473, + ] + + self.p = 0.05 # pixel size in mm + self.psd_radius = 762 + self.module_centre = ( + module_centre # 639.5p = 31.975 mm from the center of the 0-th + ) + self.module_pixel_number = np.arange(self.STRIPS_PER_MODULE, dtype=np.int64) + + self.init_conv = self.p / self.psd_radius # 6.56e-5 + + self.single_peak = True # True is much better + self.use_pickle = True + + data_dir = "/host-home/projects/outputs/angular_calibration/" + si_nexus_file_numbers = [1410289] + fitted_peaks_for_modules_file = ( + f"/host-home/projects/outputs/{si_nexus_file_numbers[0]}_fitted_peaks.obj" + ) + + ang_cal = "/host-home/projects/outputs/mythen_calibration/processed/ang_cal_171125.off" # noqa + self.module_angular_cal, self.beamline_offset = ( + I11Reduction.read_singular_angcal_files(ang_cal) + ) # ["offset"], module_cal["conv"], module_cal["centre"] + + bad_channels = load_int_array_from_file( + "/workspaces/XRPD-Toolbox/config/i11/bad_channels.txt" + ) + + calibrant = get_calibrant("Si") + calibrant.wavelength = self.wavelength_in_ang / 1e10 + observed_reflections_in_tth = calibrant.get_peaks("2th_deg") + + filepaths = self.generate_filepaths(data_dir, si_nexus_file_numbers) + + ######################################## + + if not self.use_pickle: + new_split_si_filepaths = [ + f"/host-home/projects/outputs/mythen_calibration/processed/{f}_modules.h5" + for f in si_nexus_file_numbers + ] + + self.module_dataset = new_split_si_filepaths[0] + + if not os.path.exists(self.module_dataset): + new_split_si_filepaths = self.split_into_modules( + filepaths, bad_channels=bad_channels + ) # (delta, n_modules, PIXELS_PER_MODULE) + + delta_points = self.get_delta_points(filepaths[0]) + fitted_peaks_for_modules = self.fit_peaks_across_delta( + delta_points=delta_points, + module_angular_cal=self.module_angular_cal, + modules=self.active_modules, + observed_reflections_in_tth=observed_reflections_in_tth, + beamline_offset=self.beamline_offset, + ) + + with open(fitted_peaks_for_modules_file, "wb") as fp: + pickle.dump(fitted_peaks_for_modules, fp) + + else: + with open(fitted_peaks_for_modules_file, "rb") as pickle_file: + fitted_peaks_for_modules = pickle.load(pickle_file) + + fitted_peaks_for_modules = self.remove_bad_modules(fitted_peaks_for_modules) + + self.plot_fit_stats(fitted_peaks_for_modules) + + # quit() + + fitted_peaks_for_modules = self.select_peaks( + fitted_peaks_for_modules, mask_type="below" + ) + + # for module in fitted_peaks_for_modules.keys(): + # module_data = fitted_peaks_for_modules[module] + + # for peak in self.peaks_to_fit: + # peak_data_for_module = module_data[ + # np.abs(module_data["calc_peak_tth"] - peak) < 0.1 + # ] + # print(module, peak_data_for_module["pixel"]) + + # quit() + + # try: + # except Exception as e: + # print(e) + + starting_params = "guess" + + if starting_params == "guess": + params = self.create_starting_params(self.beamline_offset) + else: + params = self.create_starting_params_from_original( + self.module_angular_cal, self.beamline_offset + ) + + self.plot_iter = 0 + + self.resid_per_module = {} + for module in self.good_modules: + self.resid_per_module[module] = [] + + results = minimize( + self.return_residual_for_modules, + params, + args=(self.good_modules, fitted_peaks_for_modules), + nan_policy="omit", + method=method, + ) + report_fit(results) + + self.residual = results.residual + + angcal_filepath = f"/host-home/projects/outputs/mythen_calibration/processed/ang_cal_020426_cen_{self.module_centre}_{method}_{self.bad_modules}.off" # noqa + + self.results_dict = results.params.valuesdict() + print(self.results_dict) + + for bad_mod in self.bad_modules: + self.results_dict[f"conv_{bad_mod}"] = self.module_angular_cal[bad_mod][ + "conv" + ] + self.results_dict[f"offset_{bad_mod}"] = self.module_angular_cal[bad_mod][ + "offset" + ] + self.results_dict[f"centre_{bad_mod}"] = self.module_centre + + self.save_results( + results_dict=self.results_dict, + filepath=angcal_filepath, + modules=list(range(28)), + bad_modules=self.bad_modules, + original_ang_cal=self.module_angular_cal, + ) + + # print(AngularCalibration.model_fields) + # quit() + + pydantic_dict = self.results_dict_to_pydantic(self.results_dict) + pydantic_model = AngularCalibration(**pydantic_dict) + pydantic_model.save_to_json(angcal_filepath.replace(".off", "_new.json")) + + # convert_angcal_to_new_pydantic_json( + # angcal_filepath.replace(".off", ".json"), + # angcal_filepath.replace(".off", "_new.json"), + # ) + + # check_files = "/dls/i11/data/2025/cm40625-5/1399181.nxs" + check_files = [ + "/host-home/projects/outputs/step_scan/1410696.nxs", + "/host-home/projects/outputs/step_scan/1414223.nxs", + ] + + for check_file in check_files: + analysis = I11Reduction( + filepath=check_file, + reduced_nxs_filepath_out=None, + xye_filepath_out=None, + out_directory="/host-home/projects/outputs/mythen_calibration", + config_filepath="/workspaces/XRPD-Toolbox/config/i11/mythen3_reduction_config.toml", + beam_energy=None, + data_reduction_mode=0, + bad_frames=[], + bad_modules=self.bad_modules, # [9,17,24], + beamline_offset=None, + active_modules=list(range(28)), + flatfield_filepath=None, + apply_flatfield=None, + angcal_filepath=angcal_filepath, + filename_suffix=f"_new_cal_{self.module_centre}", + execute_reduction=True, + ) + + for module in range(28): + print(analysis.module_angular_cal[module]) + + basename = os.path.basename(check_file) + + analysis.plot_by_region_of_interest( + observed_reflections_in_tth, + tol=0.04, + filepath=f"/host-home/projects/outputs/roi_{basename}.png", + ) + analysis.plot_diffraction_by_mod(filepath=f"./outputs/diff_{basename}.png") # noqa + # analysis.plot_diffraction() + + analysis.plot_modules_by_ring(output_folder="/host-home/projects/outputs") + # analysis.plot_by(["frame"]) + + +def module_distance(module: int): + max_dist = 13.5 + + distance = np.abs(module - 14) + # Normalize so: + # distance = 0 → red + # distance = max → blue + normalised = 1 - (distance / max_dist) + + return normalised + + +def plot_convs(conv: pd.DataFrame, steps): + plt.figure(figsize=(16, 10)) + + import matplotlib.cm as cm + + cmap = cm.get_cmap("bwr") + + for mod in range(28): + if mod in [11]: + continue + + normalised = module_distance(mod) + + color = cmap(normalised) + + if mod > 13: + line = "--" + else: + line = "-" + + plt.plot( + steps, + conv[str(mod)], + label=str(mod), + linestyle=line, + color=color, + ) + + plt.legend() + plt.xlabel("Delta Range of Calibration") + plt.ylabel("Calibrated Distance of Module (mm)") + plt.savefig("/host-home/projects/outputs/step_cals.png") + plt.show() + plt.close() + + +if __name__ == "__main__": + method = "leastsq" + + for i in range(27): + print(i, module_distance(i)) + + # quit() + + # step_size = 18 + # steps = np.arange(0, 90, step_size) + + # distance_file = "./outputs/cal_step_vs_distance.csv" + + # conv = pd.read_csv(distance_file) + + # plot_convs(conv, steps) + + # quit() + + # leastsq: Levenberg-Marquardt (default) + # ’least_squares’: Least-Squares minimization, using Trust Region Reflective method + # ’differential_evolution’: differential evolution + # ’brute’: brute force method + # ’basinhopping’: basinhopping + # ’ampgo’: Adaptive Memory Programming for Global Optimization + # ’nelder’: Nelder-Mead + # ’lbfgsb’: L-BFGS-B + # ’powell’: Powell + # ’cg’: Conjugate-Gradient + # ’newton’: Newton-CG + # ’cobyla’: Cobyla + # ’bfgs’: BFGS + # ’tnc’: Truncated Newton + # ’trust-ncg’: Newton-CG trust-region + # ’trust-krylov’: Newton GLTR trust-region + # ’trust-constr’: trust-region for constrained optimization + # ’slsqp’: Sequential Linear Squares Programming + # ’emcee’: Maximum likelihood via Monte-Carlo Markov Chain + # ’shgo’: Simplicial Homology Global Optimization + # ’dual_annealing’: Dual Annealing optimization + + # methods = ["leastsq", "least_squares", "differential_evolution", "brute", + # "basinhopping", "ampgo", "nelder", "lbfgsb", "powell", "cg", "newton", "cobyla", + # "bfgs", "tnc", "trust-ncg", "trust-exact", "trust-krylov","trust-constr", + # "slsqp", "shgo", "dual_annealing"] + + wavelength_in_ang = ( + 0.828783 # 0.828773 # Angstrom - as refined by Eamonn on the MAC + ) + + # convs = [] + + # for step in steps: + lower_delta = 0 + upper_delta = 35 + + cal = AngularCalibrateMythen( + wavelength_in_ang=wavelength_in_ang, + method=method, + module_centre=639.5, + lower_delta=lower_delta, + upper_delta=upper_delta, + ) + + # module_convs = [ + # abs(0.05 / cal.results_dict[f"conv_{module}"]) for module in range(28) + # ] + # convs.append(module_convs) + + # convs = pd.DataFrame(convs) + + # convs.to_csv(distance_file) + + # print(convs) diff --git a/src/xrpd_toolbox/i11/mythen.py b/src/xrpd_toolbox/i11/mythen.py new file mode 100644 index 0000000..1a95877 --- /dev/null +++ b/src/xrpd_toolbox/i11/mythen.py @@ -0,0 +1,863 @@ +import json +import math +import os +import re +from collections import OrderedDict +from collections.abc import Collection, Iterable +from functools import cached_property +from pathlib import Path +from shutil import copy +from typing import Literal + +import h5py +import matplotlib.pyplot as plt +import numpy as np +from h5py import Dataset, File +from pydantic import Field + +from xrpd_toolbox.core import XRPDBaseModel, XYEData +from xrpd_toolbox.fit_engine.peaks import fit_peaks +from xrpd_toolbox.fit_engine.profile_calculation import Structure +from xrpd_toolbox.plotting import DataPlot +from xrpd_toolbox.utils.messenger import Messenger +from xrpd_toolbox.utils.mythen_utils import channel_to_angle, modules_to_pixels +from xrpd_toolbox.utils.utils import ( + bin_and_propagate_errors, + get_calibrant_peaks, + get_entry, + h5_to_array, + load_int_array_from_file, + save_data_to_h5, +) + +# np.set_printoptions(threshold=sys.maxsize) + +MODULES_IN_DETECTOR = 28 +PIXELS_PER_MODULE = 1280 +PSD_RADIUS = 762 # mm +MYTHEN_PIXEL_SIZE = 0.05 # mm + +PIXEL_NUMBER = np.arange(PIXELS_PER_MODULE, dtype=np.int64) + + +class ModuleConversion(XRPDBaseModel): + conv: float + offset: float + centre: float + + @property + def module_sign(self) -> int: # returns -1 or 1 depending on sign of conv + return int(math.copysign(1, self.conv)) + + @property + def distance(self) -> float: + """returns the theoretical distance of the module based on the conv""" + return abs(MYTHEN_PIXEL_SIZE / self.conv) + + def return_raw_tth(self, zero_offset: float) -> np.ndarray: + """this calculated the module raw tth, ie the tth of the detector + without taking the delta angle into account""" + + raw_tth = channel_to_angle( + pixel_number=PIXEL_NUMBER, + centre=self.centre, + conv=self.conv, + module_offset=self.offset, + zero_offset=zero_offset, + ) + return raw_tth + + +# TODO: Make module_n a dict? +class AngularCalibration(XRPDBaseModel): + beamline_offset: float | int + module_0: ModuleConversion + module_1: ModuleConversion + module_2: ModuleConversion + module_3: ModuleConversion + module_4: ModuleConversion + module_5: ModuleConversion + module_6: ModuleConversion + module_7: ModuleConversion + module_8: ModuleConversion + module_9: ModuleConversion + module_10: ModuleConversion + module_11: ModuleConversion + module_12: ModuleConversion + module_13: ModuleConversion + module_14: ModuleConversion + module_15: ModuleConversion + module_16: ModuleConversion + module_17: ModuleConversion + module_18: ModuleConversion + module_19: ModuleConversion + module_20: ModuleConversion + module_21: ModuleConversion + module_22: ModuleConversion + module_23: ModuleConversion + module_24: ModuleConversion + module_25: ModuleConversion + module_26: ModuleConversion + module_27: ModuleConversion + + +class MythenSettings(XRPDBaseModel): + active_modules: list[int] = list(range(MODULES_IN_DETECTOR)) + bad_modules: list[int] = [] + bad_channel_masking: bool = True + zero_channel_masking: bool = True + flatfield_filepath: str | Path = "" + apply_flatfield: bool = False + modules_in_flatfield: list[int] = list(range(MODULES_IN_DETECTOR)) + send_to_ispyb: bool = False + rebin_step: float = 0.004 + default_counter: int = Field(default=0, ge=0, le=3) + edge_bad_channels: int = 15 + error_calc: Literal["poisson", "std_dev", "max"] = "poisson" + data_reduction_mode: Literal[ + "step_scan", "time_resolved", "pump_probe", "flat_field", "bad_pixel" + ] = "step_scan" + bad_channels_filepath: str | Path = "/dls_sw/i11/software/mythen/badchannels.txt" + angcal_filepath: str | Path = "" + + +class BadChannels: + def __init__(self, filepath: str | Path): + self.filepath = filepath + self.array = self.load_bad_channels() + self.masks = self.bad_channels_to_mask() + + def load_bad_channels(self): + if not self.filepath: + raise ValueError("Bad channels file path is not set.") + self.bad_channels = load_int_array_from_file(self.filepath) + return self.bad_channels + + def _split_bad_channels_into_modules(self, bad_channels: np.ndarray): + """Takes a long array eg. 0, 1, 67, 1285, 7655, 32000 + turns it into 28 arrays, [0, 1, 67], ... [1285], ... [7655], ...[32000] + """ + + bins = np.arange( + 0, MODULES_IN_DETECTOR * PIXELS_PER_MODULE + 1, PIXELS_PER_MODULE + ) + indices = ( + np.digitize(bad_channels, bins) - 1 + ) # subtract 1 because digitize returns 1-based + + detector_bad_channels_per_module = [ + bad_channels[indices == i] for i in range(MODULES_IN_DETECTOR) + ] + + return detector_bad_channels_per_module + + def bad_channels_to_mask(self) -> OrderedDict: + """PyFAI considers masks with values equal to zero 0 as valid pixels (mnemonic: + non zero pixels are masked out) - Therefore we keep the convention here + https://pyfai.readthedocs.io/en/latest/conventions.html + + Takes the long araay of numbers and convert, used by the SLSDet Package + and converts it to a module by module mask + """ + + bad_channel_mask = OrderedDict() + + bad_channels_per_module = self._split_bad_channels_into_modules( + self.bad_channels + ) + + module_bad_channels = [ + bad_channels_per_module[f] - (PIXELS_PER_MODULE * f) + for f in range(MODULES_IN_DETECTOR) + ] + + for module in range(MODULES_IN_DETECTOR): + mask = np.zeros(PIXELS_PER_MODULE, dtype=bool) + mask[module_bad_channels[module]] = True + bad_channel_mask[module] = mask + + return bad_channel_mask # bad channels are denoted by 1 + + +class MythenDataLoader: + def __init__( + self, + filepath: str | Path, + counter: int = 0, + mythen_data_path="mythen_nx", + frames: int | slice | Collection[int] = slice(None), + modules: int | slice | Collection[int] = slice(None), + ): + self.filepath = Path(filepath) + self.frames = frames + self.modules = modules + self.counter = counter + self.mythen_data_path = mythen_data_path + + self.entry = get_entry(self.filepath) + self.dataset_path = f"/{self.entry}/{self.mythen_data_path}/data" + self.n_modules_in_data, self.n_frames = self.read_nxs_metadata() + + if self.frames == slice(None) and self.modules == slice(None): + self.data, self.module_data = self.load() + else: + self.data = self.get_data(modules=self.modules, frame=self.frames) + + def load(self): + self.data = self.load_all_data(self.counter) + self.module_data = np.array_split(self.data, self.n_modules_in_data, axis=-1) + + return self.data, self.module_data + + @property + def pixels_per_module(self): + return PIXELS_PER_MODULE + + def get_data( + self, + modules: int | Collection[int] | slice, + frame: int | Collection[int] | slice, + counter: int = 0, + ): + if isinstance(modules, int) or isinstance(modules, Collection): + pixels = modules_to_pixels(modules=modules) + else: + pixels = modules + + with File(self.filepath, "r") as file: + if self.dataset_path not in file: + raise ValueError( + f"Dataset path {self.dataset_path} not found in HDF5 file." + ) + + data = file.get(self.dataset_path) + + if (data is not None) and isinstance(data, Dataset): + if data.ndim < 1: + raise ValueError("Data has insufficient dimensions.") + module_frame_data = data[frame, pixels, counter] + + return np.asarray(module_frame_data) + else: + raise ValueError( + f"Data at {self.dataset_path} in {self.filepath}is None." + ) + + @cached_property + def delta_path(self) -> str: + delta_subpaths = ("delta", "deltas", "ds") + + with h5py.File(self.filepath, "r") as file: + base = f"/{self.entry}/{self.mythen_data_path}" + + for name in delta_subpaths: + path = f"{base}/{name}" + if path in file and isinstance(file[path], h5py.Dataset): + return path + + raise KeyError( + f"No delta dataset found. Tried: " + f"{', '.join(f'{base}/{n}' for n in delta_subpaths)}" + ) + + @cached_property + def count_time_path(self) -> str: + return f"/{self.entry}/instrument/{self.mythen_data_path}/count_time" + + @cached_property + def positions(self) -> np.ndarray: + try: + deltas = h5_to_array(self.filepath, self.delta_path) + return deltas + except ValueError as e: + print(f"{e} - {self.delta_path} in data - returning 0") + deltas = np.array([0]) + return deltas + + @cached_property + def durations(self) -> np.ndarray: + return h5_to_array(self.filepath, self.count_time_path) + + def read_nxs_metadata(self) -> tuple[int, int]: + with h5py.File(self.filepath, "r") as file: + data = file.get(self.dataset_path) + if (data is not None) and isinstance(data, Dataset): + first_frame = data[0, :, self.counter] + first_frame_len = first_frame.shape[-1] + n_modules_in_data = int(first_frame_len / self.pixels_per_module) + n_frames = len(data) + return n_modules_in_data, n_frames + else: + raise ValueError(f"Data is None at {self.dataset_path}") + + def load_all_data(self, counter: int) -> np.ndarray: + return self.get_data(slice(None), slice(None), counter) + + +class MythenModule: + def __init__( + self, + data: np.ndarray, + conversion: ModuleConversion, + beamline_offset: float, + module_id: int, + positions: np.ndarray, + durations: np.ndarray | None = None, + bad_channel_mask: np.ndarray | None = None, + ): + self.data = data + self.conversion = conversion + self.beamline_offset = beamline_offset + self.positions = positions + self.module_id = module_id + + if bad_channel_mask is None: + self.bad_channel_mask = np.zeros(self.data.shape[-1], dtype=bool) + else: + self.bad_channel_mask = bad_channel_mask + + if durations is None: + self.durations = np.ones(self.data.shape[-1], dtype=bool) + else: + self.durations = durations + + # @cached_property + # def pixel_number(self) -> np.ndarray: + # """returns a 1d array of integers between 0 and 1280""" + # return PIXEL_NUMBER + + @cached_property + def raw_tth(self) -> np.ndarray: + """this calculated the module raw tth, ie the tth of the detector + without taking the delta angle into account""" + + raw_tth = self.conversion.return_raw_tth(self.beamline_offset) + + return raw_tth + + @cached_property + def positions_2d(self): + print(len(self.positions)) + positions_2d = np.broadcast_to(self.positions, self.data.shape) + return positions_2d + + @cached_property + def duration_2d(self): + duration_2d = np.broadcast_to(self.durations[:, np.newaxis], self.data.shape) + return duration_2d + + @cached_property + def tth_2d(self) -> np.ndarray: + """Creates an array with the same shape as the data, + with the tth values at the corresponding indexes""" + + tth_2d = np.broadcast_to(self.raw_tth, self.data.shape) + tth_2d = tth_2d + self.positions[:, None] + return tth_2d + + @cached_property + def mask_2d(self) -> np.ndarray: + """Creates an array with the same shape as the data, + with the tth values at the corresponding indexes""" + + mask_2d = np.broadcast_to(self.bad_channel_mask, self.data.shape) + return mask_2d + + @cached_property + def unmasked_counts(self) -> np.ndarray: + return self.data.flatten() + + @cached_property + def unmasked_duration(self) -> np.ndarray: + return self.duration_2d.flatten() + + @cached_property + def unmasked_tth(self) -> np.ndarray: + return self.tth_2d.flatten() + + @cached_property + def unmasked_error(self) -> np.ndarray: + return np.sqrt(self.unmasked_counts) + + @cached_property + def counts(self) -> np.ndarray: + masked_counts = self.data[:, ~self.bad_channel_mask] + return masked_counts.flatten() + + @cached_property + def duration(self) -> np.ndarray: + duration = self.duration_2d[:, ~self.bad_channel_mask] + return duration.flatten() + + @cached_property + def tth(self) -> np.ndarray: + masked_tth = self.tth_2d[:, ~self.bad_channel_mask] + return masked_tth.flatten() + + @cached_property + def error(self) -> np.ndarray: + return np.sqrt(self.counts) + + +class MythenDetector: + def __init__( + self, + filepath: str | Path, + angular_calibration: AngularCalibration | None = None, + settings: MythenSettings | None = None, + xye_filepath_out: str | Path | None = None, + output_directory: str | Path | None = None, + filename_suffix: str = "", + ): + self.filepath = filepath + self.filename_suffix = filename_suffix + + if str(self.filepath) == "dev": + pass + elif not str(self.filepath).lower().endswith(".nxs"): + raise ValueError(f"{self.filepath} should be a Nexus File!!") + elif not os.path.exists(self.filepath): + raise ValueError(f"{self.filepath} does not exist!!") + + self.file_dir = os.path.dirname(str(self.filepath)) + self.filename = os.path.basename(str(self.filepath)) + + self.output_directory = output_directory or os.path.join( + str(self.file_dir), "processed" + ) + + if not os.path.exists(self.output_directory): + os.makedirs(self.output_directory) + + self.processed_nexus_filepath = os.path.join( + str(self.output_directory), + f"{Path(self.filename).stem}_reduced_mythen3{self.filename_suffix}.nxs", + ) + + self.xye_filepath_out = xye_filepath_out or os.path.join( + self.file_dir, + f"{self.filename}_summed_mythen3{self.filename_suffix}.xye", + ) + + self.settings = settings or MythenSettings() + self.calibration = angular_calibration or AngularCalibration.load( + self.settings.angcal_filepath + ) + + self.active_modules: list[int] = self.settings.active_modules + self.bad_modules: list[int] = self.settings.bad_modules + self.good_modules: list[int] = list( + set(self.active_modules) ^ set(self.bad_modules) + ) + self.ring1_modules: list[int] = list(range(0, 14)) + self.ring2_modules: list[int] = list(range(14, 28)) + + self.active_ring1_modules: list[int] = list( + set(self.active_modules) ^ set(self.ring2_modules) + ) + self.active_ring2_modules: list[int] = list( + set(self.active_modules) ^ set(self.ring1_modules) + ) + + self.bad_channels = BadChannels(self.settings.bad_channels_filepath) + + # mythen data loader, just loads the data, + # it has no information about which modules are which + + self.mythen_data = MythenDataLoader( + filepath=filepath, + ) + + self.contruct_modules() + + def _make_mythen_module_kwargs(self, n_module, nth_active_module): + """MythenModule requires quite a lot of info, + so it's easier to make a contructor of it's kwargs""" + + these_frames = slice(None, None, 2) + + return { + "data": self.mythen_data.module_data[n_module][these_frames], + "conversion": self.calibration[f"module_{nth_active_module}"], + "beamline_offset": self.calibration.beamline_offset, + "module_id": nth_active_module, + "positions": self.mythen_data.positions[these_frames], + "durations": self.mythen_data.durations[these_frames], + "bad_channel_mask": self.bad_channels.masks[nth_active_module], + } + + def get_module(self, mod: int) -> MythenModule: + return self.modules[mod] + + def contruct_modules(self): + self.modules = OrderedDict() + + for n_module, nth_active_module in enumerate(self.settings.active_modules): + module = MythenModule( + **self._make_mythen_module_kwargs(n_module, nth_active_module) + ) + + self.modules[nth_active_module] = module + + def generate_xye( + self, modules: Iterable[int], masked: bool = True + ) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + if masked: + module_tth_list = [self.get_module(f).tth for f in modules] + module_counts_list = [self.get_module(f).counts for f in modules] + module_errors_list = [self.get_module(f).error for f in modules] + else: + module_tth_list = [self.get_module(f).unmasked_tth for f in modules] + module_counts_list = [self.get_module(f).unmasked_counts for f in modules] + module_errors_list = [self.get_module(f).unmasked_error for f in modules] + + unsorted_tth = np.concatenate(module_tth_list) + unsorted_counts = np.concatenate(module_counts_list) + unsorted_error = np.concatenate(module_errors_list) + + sort_indexes = np.argsort(unsorted_tth) + + tth = unsorted_tth[sort_indexes] + counts = unsorted_counts[sort_indexes] + error = unsorted_error[sort_indexes] + + return tth, counts, error + + def generate_binned_xye( + self, + masked: bool = True, + rebin_step: float = 0.004, + error_calc: str = "poisson", + normalise: bool = True, + ) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Returns the final dataset that you would use to generate a xye file, + binned and all + """ + + tth, counts, error = self.generate_xye(modules=self.good_modules, masked=masked) + + # TODO: Should count times really be in MythenModule and then recreated this way + # - seems like extra wasteful computation? + + if normalise: + module_duration_list = [ + self.get_module(f).duration for f in self.good_modules + ] + durations = np.concatenate(module_duration_list) + counts = counts / durations + + binned_tth, binned_counts, binned_error = bin_and_propagate_errors( + tth, + counts, + error, + rebin_step=rebin_step, + error_calc=error_calc, + ) + + return binned_tth, binned_counts, binned_error + + def communicate_with_control(self, send_to_ispyb: bool = False): + """ + Attempts to connect to i11-control and send a message indicating + that a file has been processed. This will cause gda to plot the latest file + + Also may send xye to ispyb so that users can lookup data + + """ + + daq = Messenger(host="i11-control") + daq.connect() + daq.send_file(str(self.xye_filepath_out)) # sends message to GDA + + if send_to_ispyb: + daq.send_to_ispyb( + str(self.filepath), str(self.xye_filepath_out) + ) # sends to ispyb + + def process_step_scan(self): + """Analyses the data using the settings provided by the MythenSettings class + Takes all of the data from each module and each step of the multistep scan + and calculates the tth for each delta position, orders them, concatenates + and puts them into a single array. Bins it, and saves it to xye/nexus file""" + + self.binned_tth, self.binned_counts, self.binned_error = ( + self.generate_binned_xye( + masked=self.settings.bad_channel_masking, + rebin_step=self.settings.rebin_step, + error_calc=self.settings.error_calc, + ) + ) + + self.xye_data = XYEData( + x=self.binned_tth, y=self.binned_counts, e=self.binned_error + ) + self.xye_data.save_to_xye(self.xye_filepath_out) + + xye_names_and_data = { + "tth": self.binned_tth, + "counts": self.binned_counts, + "error": self.binned_error, + } + + self.save_data_to_nexus(subpath="/xye", names_and_data=xye_names_and_data) + + ring1_data, ring2_data = self.get_ring1_ring2_data() + self.save_data_to_nexus(subpath="/ring1", names_and_data={"data": ring1_data}) + self.save_data_to_nexus(subpath="/ring1", names_and_data={"data": ring2_data}) + + print(f"Data saved to: {self.processed_nexus_filepath}") + + self.data_plot = DataPlot(data=self.xye_data, title=self.filename) + self.data_plot.plot() + + try: + self.communicate_with_control(send_to_ispyb=self.settings.send_to_ispyb) + self.data_plot = DataPlot(data=self.xye_data, title=self.filename) + except Exception as e: + print(f"Could not connect with control - {e}") + pass + + def get_ring1_ring2_data(self): + first_ring_pixels = len(self.active_ring1_modules) * PIXELS_PER_MODULE + ring1_data = self.mythen_data.get_data(slice(0, first_ring_pixels), slice(None)) + ring2_data = self.mythen_data.get_data( + slice(first_ring_pixels, None), slice(None) + ) + + return ring1_data, ring2_data + + def save_data_to_nexus( + self, subpath: str, names_and_data: dict[str, np.ndarray], **kwargs + ): + copy(self.filepath, self.processed_nexus_filepath) + + for name, data in names_and_data.items(): + save_data_to_h5( + self.filepath, + f"{self.mythen_data.entry}{subpath}/{name}", + data, + **kwargs, + ) + + def process_pump_probe(self): + pass + + def process_time_resolved(self): + pass + + def simulate_data(self, calibrant_name: str): + pass + + def plot_diffraction( + self, filepath: str | Path | None = None, calibrant: str | None = None + ): + plt.figure(figsize=(10, 7)) + + zero_offset = -0.01 + + tth, counts, error = self.generate_binned_xye( + masked=self.settings.bad_channel_masking, + rebin_step=self.settings.rebin_step, + error_calc=self.settings.error_calc, + ) + + if calibrant is not None: + # si_tth = get_calibrant_peaks("Si", 0.828783) + + si = Structure.load_from_cif("/workspaces/XRPD-Toolbox/cifs/si.cif") + _, _, si_tth, si_intensity = si.calculate_reflections(0.828783) + + background = np.amin(counts) + + phase_scale = (np.amax(counts) - background) / np.amax(si_intensity) + + print(phase_scale) + + for t, i in zip(si_tth, si_intensity, strict=True): + print(t, i) + + si_intensity = phase_scale * si_intensity + background + + plt.scatter( + si_tth + zero_offset, + si_intensity, + label="calibrant positions", + color="red", + ) + + plt.errorbar(tth, counts, error, label="data") + plt.legend(ncols=2) + plt.xlabel("tth") + plt.ylabel("Intensity (arb. units)") + + if filepath: + plt.savefig(filepath) + + plt.show() + plt.close() + + return tth, counts, error + + def plot_diffraction_by_mod(self, filepath: str | Path | None = None): + plt.figure(figsize=(10, 7)) + + print(self.good_modules) + + for module in self.good_modules: + print(module) + sort_index = np.argsort(self.modules[module].tth) + tth = (self.modules[module].tth)[sort_index] + counts = (self.modules[module].counts)[sort_index] + + plt.plot( + tth, + counts, + label=str(self.modules[module].module_id), + ) + # plt.text( + # np.mean(tth), + # np.amin(counts), + # str(self.modules[module].module_id), + # ) # type: ignore + + plt.xlabel("tth") + plt.ylabel("Intensity (arb. units)") + plt.legend(ncols=2) + + if filepath: + plt.savefig(filepath) + + plt.show() + plt.close() + + +def convert_angcal_to_pydantic_json( + ang_cal_json_path: str | Path, new_path: str | Path +): + pydantic_dict = {} + + with open(ang_cal_json_path, "rb") as file: + legacy_dict = json.load(file) + + pydantic_dict["beamline_offset"] = legacy_dict["beamline_offset"] + pydantic_dict["centre"] = legacy_dict["centre"] + + for entry in legacy_dict.keys(): + numbers = re.findall(r"-?\d*\.?\d+", str(entry)) + + if len(numbers) > 0: + module = numbers[0] + pydantic_dict[f"module_{module}"] = { + "conv": legacy_dict[f"conv_{module}"], + "offset": legacy_dict[f"offset_{module}"], + } + + pydantic_model = AngularCalibration(**pydantic_dict) + pydantic_model.save_to_json(new_path) + + +def convert_angcal_to_new_pydantic_json( + ang_cal_json_path: str | Path, new_path: str | Path +): + pydantic_dict = {} + module_conv_list = [] + + with open(ang_cal_json_path, "rb") as file: + legacy_dict = json.load(file) + + for entry in legacy_dict.keys(): + numbers = re.findall(r"-?\d*\.?\d+", str(entry)) + + if len(numbers) > 0: + module = numbers[0] + module_conv_list.append( + { + "name": f"module_{module}", + "conv": legacy_dict[f"conv_{module}"], + "beamline_offset": legacy_dict[f"conv_{module}"], + "centre": legacy_dict["beamline_offset"], + "offset": legacy_dict["centre"], + } + ) + + pydantic_dict["modules"] = module_conv_list + pydantic_model = AngularCalibration(**pydantic_dict) + pydantic_model.save_to_json(new_path) + + +if __name__ == "__main__": + PARENT_PATH = Path(__file__).parent.parent + + print(PARENT_PATH) + + CONFIG_FILE = "/workspaces/XRPD-Toolbox/config/i11/mythen3_reduction_config.toml" + + DATA_FILE = "//host-home/projects/outputs/step_scan/1410289.nxs" + + ANG_CAL = "/host-home/projects/outputs/mythen_calibration/processed/ang_cal_020426_cen_639.5_leastsq_[11, 17, 27]_new.json" # noqa + + settings = MythenSettings.load_from_toml(CONFIG_FILE) + # settings.bad_modules = list(range(27)) + print("Loaded settings:", settings) + + # print(DATA_FILE) + + # MythenDataLoader(DATA_FILE) + + BAD_CHAN_FILE = "/workspaces/XRPD-Toolbox/config/i11/bad_channels.txt" + + angular_calibration = AngularCalibration.load_from_json(ANG_CAL) + # angular_calibration.beamline_offset = -0.4979739 + + settings.bad_channels_filepath = BAD_CHAN_FILE + + # DATA_FILE = "/workspaces/XRPD-Toolbox/examples/i11/step_scan/1414223.nxs" + DATA_FILE = "/host-home/projects/outputs/angular_calibration/1410289.nxs" + + mythen3 = MythenDetector( + filepath=DATA_FILE, + settings=settings, + angular_calibration=angular_calibration, + ) + + tth, counts, error = mythen3.plot_diffraction( + filepath="/host-home/projects/outputs/diff.png", calibrant="Si" + ) + + # mythen3.plot_diffraction_by_mod() + + quit() + + active_modules = list(range(28)) + + for module in range(28): + module_name = f"module_{module}" + bad_modules = [f for f in active_modules if f != module] + settings.bad_modules = bad_modules + + mythen3 = MythenDetector( + filepath=DATA_FILE, + settings=settings, + angular_calibration=angular_calibration, + ) + + tth, counts, error = mythen3.plot_diffraction( + filepath="/host-home/projects/outputs/peak_fits.png", calibrant="Si" + ) + + si_tth = get_calibrant_peaks("Si", wavelength_in_ang=0.828783) + peaks = fit_peaks(tth, counts, si_tth) + + centres, amps, fwhms = map( + list, zip(*[(p.centre, p.amplitude, p.fwhm) for p in peaks], strict=True) + ) + + plt.plot(si_tth, centres - si_tth) + plt.ylabel("Fit Peak - Calc Peak (deg)") + plt.xlabel("tth of peak (deg)") + plt.savefig(f"/host-home/projects/outputs/peak_error_module_{module}.png") + plt.show() + + # mythen3.plot_diffraction_by_mod() + # print(mythen3.counts_times) diff --git a/src/xrpd_toolbox/i11/mythen3_reduction_legacy.py b/src/xrpd_toolbox/i11/mythen3_reduction_legacy.py new file mode 100644 index 0000000..bc557cb --- /dev/null +++ b/src/xrpd_toolbox/i11/mythen3_reduction_legacy.py @@ -0,0 +1,2247 @@ +# type: ignore +import argparse +import os +import sys +from itertools import product +from pathlib import Path +from shutil import copy, copy2 +from tomllib import load + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +from h5py import File as h5pyFile +from matplotlib.gridspec import GridSpec + +from xrpd_toolbox.utils.messenger import Messenger +from xrpd_toolbox.utils.mythen_utils import paired_modules +from xrpd_toolbox.utils.unit_conversion import tth_to_q +from xrpd_toolbox.utils.utils import AnalysisLogger, load_int_array_from_file + +matplotlib.use("Qt5Agg") # or TkAgg + + +np.seterr( + divide="ignore", invalid="ignore" +) # dividing by zero throws a warning, this is expected due to some pixels being dead + + +pd.set_option("display.max_columns", None) +pd.set_option("display.max_rows", None) +pd.set_option("display.width", 1000) +np.set_printoptions(threshold=sys.maxsize) + + +class I11Reduction: + __slots__ = ( + "filepath", + "reduced_nxs_filepath_out", + "xye_filepath_out", + "xye_filepath_out_q", + "file_dir", + "out_directory", + "file_name", + "file_extension", + "filename_suffix", + "config_filepath", + "STRIPS_PER_MODULE", + "MODULES_PER_DETECTOR", + "config", + "mythen3_config_dir", + "flatfield_filepath", + "apply_flatfield", + "active_modules", + "bad_modules", + "bad_frames", + "bad_channel_masking", + "default_counter", + "n_bad_edge_channels", + "rebin_step", + "error_calc", + "beam_energy", + "beamline_offset", + "save_nxs_out", + "verbose_nxs", + "debug_mode", + "save_in_q_space", + "data_reduction_mode", + "wavelength", + "raw_flatfield_counts", + "flatfield_modules", + "bad_channels", + "module_angular_cal", + "module_raw_tth", + "deltas", + "duration", + "n_frames", + "wholedetector_raw_frames", + "raw_frame_counts", + "frames_range", + "all_module_data", + "angular_corrected_data", + "module_raw_data", + "xyedata", + "frame_data", + "angular_corrected_data_unmasked", + "out_raw_data", + "n_modules_in_data", + "good_modules", + "Ie", + "Ic4", + "whole_data_raw_tth", + "beam_intensity", + "ffcorr", + "bad_channels_filepath", + "modules_in_flatfield", + "angcal_filepath", + "live", + "send_to_ispyb", + "execute_reduction", + "logger", + "logging", + ) + + @staticmethod + def read_singular_angcal_files(angcal_filepath: str) -> dict: + """ + + Reads a single of ang.off files and returns a dict with the + each modules anngular calibrations contains within a dict + + each module dict contains "offset", "conv" and "centre" + + eg. self.module_angular_cal[module]["offset"] + + """ + + module_angular_cal = {} + beamline_offset = None + + with open(angcal_filepath) as f: + for line in f: + if "beamline_offset" in line: + elements = line.split() + beamline_offset = float(elements[1]) + + elif line := line.strip(): + elements = line.split() + module_cal = {} + + ( + module_in_file, + module_cal["offset"], + module_cal["conv"], + module_cal["centre"], + ) = ( + int(elements[1]), + float(elements[3]), + float(elements[5]), + float(elements[7]), + ) + + module_angular_cal[module_in_file] = module_cal + + return module_angular_cal, beamline_offset + + @staticmethod + def read_angular_calibration_and_create_cal_dict( + config: dict, active_modules: list[int] + ) -> dict: + """ + + Reads a load of ang_d .off files and returns a dict with + the each modules anngular calibrations contains within a dict + + each module dict contains "offset", "conv" and "centre" + + eg. self.module_angular_cal[module]["offset"] + + """ + + print(config) + + module_angular_cal = {} + + for active_mod in active_modules: + single_cal_file = config["".join(["module_", str(active_mod)])][ + "angular_calibration_path" + ] + + with open(single_cal_file) as f: + module_cal = {} + for line in f: + if "beamline_offset" in line: + elements = line.split() + beamline_offset = float(elements[1]) + + elif line := line.strip(): + elements = line.split() + ( + module_in_file, # noqa + module_cal["offset"], + module_cal["conv"], + module_cal["centre"], + ) = ( + int(elements[1]), + float(elements[3]), + float(elements[5]), + float(elements[7]), + ) + + module_angular_cal[active_mod] = module_cal + + return module_angular_cal, beamline_offset + + @staticmethod + def channel_to_angle(module_pixel_number, centre, conv, offset, beamline_offset): + module_conversions = module_pixel_number - centre + module_conversions = module_conversions * conv + module_conversions = np.arctan(module_conversions) + raw_tth = offset + np.rad2deg(module_conversions) + beamline_offset + + return raw_tth + + @staticmethod + def channel_to_angle_in_real_units( + module_pixel_number, + centre, + offset, + beamline_offset, + radius, + p=0.05, + direction=1, + ): + """ + module_pixel_number: channel number, 0-1280 + centre: centre (in pixel number - ie 1280/2) + offset: module offset, degrees + radius: radius, mm - approx 760 + direction: 1 or -1 depending if module is flipped or not + p: pixel size, mm = 0.05 + """ + + raw_tth = I11Reduction.channel_to_angle( + module_pixel_number, centre, (p / radius), offset, beamline_offset + ) + + return raw_tth + + def calculate_modules_tth(self): + """ + Given a set of calibration parameters, return a numpy array + describing the angle, in degrees, of each pixel in that module + + Ref: + section 1.1 of "Angular conversion 1-D" by A. Cervellino (ANGCONV_2024.pdf). + beamline_offset + file:///home/akz63626/Downloads/ANGCONV_2024.pdf + + """ + + module_raw_tth = {} + module_pixel_number = np.arange(self.STRIPS_PER_MODULE, dtype=np.int64) + module_raw_tth["mod_channel"] = module_pixel_number + + for n_mod in self.active_modules: + # cm = self.module_angular_cal[n_mod]["centre"] + # km = self.module_angular_cal[n_mod]["conv"] + # om = self.module_angular_cal[n_mod]["offset"] + # sm = +1/-1 # this is already included in the km in the ang.off files + + raw_tth = I11Reduction.channel_to_angle( + module_pixel_number, + self.module_angular_cal[n_mod]["centre"], + self.module_angular_cal[n_mod]["conv"], + self.module_angular_cal[n_mod]["offset"], + self.beamline_offset, + ) + + module_raw_tth[n_mod] = ( + raw_tth # this is raw because it doesn't take into account the delta + ) + + whole_data_raw_tth = np.array( + [module_raw_tth[f] for f in self.active_modules] + ).flatten() + + return module_raw_tth, whole_data_raw_tth + + def generate_badchannel_dict(self) -> dict: + """ + + loads the bad channels specified with the bad_channels_path + which are specified in the .toml config file. + + Creates a dictionary of bad channels so that they can be + accessed self.bad_channels[n] where n is 0-27 + + """ + + bad_channels = {} + + self.logger.log("Using the following bad channels files:") + for active_mod in self.active_modules: + badchan_file = self.config["".join(["module_", str(active_mod)])][ + "bad_channels_path" + ] + bad_channels[active_mod] = load_int_array_from_file(badchan_file) + self.logger.log( + f"Module: {active_mod} badchan_file | Bad Chans: {len(bad_channels[active_mod])}" # noqa + ) + + self.logger.log("\n") + return bad_channels + + @staticmethod + def read_config(mythen3_config_dir): + """ + reads the config file and works out what modules are currently active + + """ + + enabled_modules_hostnames = None + + with open(mythen3_config_dir) as file: + lines = [line.rstrip() for line in file] + + for _, line in enumerate(lines): + if line.startswith("hostname"): + enabled_modules_hostnames = line.split()[1::] + + enabled_modules = [ + int(n_mod.rstrip()[-3::]) - 100 for n_mod in enabled_modules_hostnames + ] + + return enabled_modules + + def apply_flatfield_correction( + self, no_ff_corr: np.ndarray, flatfield_counts: np.ndarray + ) -> np.ndarray: + """ + Divide raw counts by flatfield counts to get scaled counts. + Where the flatfield counts are zero, return zero. Then rescale + by the mean value of flatfield counts to get back to a unit of + counts. + + This MUST be scaled on the whole detector not on a module/module + basis otherwise counts will be thrown off massively by bad + modules/channels and the module will scale incorrectly!!! + """ + + scaled_counts = np.divide( + no_ff_corr, + flatfield_counts, + where=flatfield_counts != 0, + out=np.zeros(no_ff_corr.shape), + ) + + # self.logger.log(np.mean(flatfield_counts)) + + return scaled_counts + + def read_nxs_metadata(self, filepath: str): + with h5pyFile(filepath, "r") as file: + try: + entry = file["entry"] + except Exception: + entry = file["entry1"] + + if "ds" in list(entry["mythen_nx"].keys()): + dummy_array = entry["mythen_nx"]["ds"][()] + self.deltas = [dummy_array[0]] * len(dummy_array) + + elif "delta" in list(entry["mythen_nx"].keys()): + self.deltas = entry["mythen_nx"]["delta"][()] + + elif "deltas" in list(entry["mythen_nx"].keys()): + self.deltas = entry["mythen_nx"]["deltas"][()] + + self.n_frames = len(entry["mythen_nx"]["data"]) + first_frame_len = len( + entry["mythen_nx"]["data"][0, :, self.default_counter][()] + ) + self.n_modules_in_data = int(first_frame_len / self.STRIPS_PER_MODULE) + + self.Ie = np.full(self.n_frames, 1) + try: + self.Ie = entry["Ie"]["data"][()] + except Exception: + try: + self.Ie = entry["mythen_nx"]["Ie"][()] + except Exception: + pass + + self.Ic4 = np.full(self.n_frames, 1) + try: + self.Ic4 = entry["Ic4"]["data"][()] + except Exception: + try: + self.Ic4 = entry["mythen_nx"]["Ic4"][()] + except Exception: + pass + + self.beam_intensity = (self.Ic4 + self.Ie) / 2 + + return self.n_frames, self.deltas, self.n_modules_in_data + + def read_nxs_data( + self, + filepath: str, + frame: int | None = None, + sum_frames: bool = False, + bad_frames=(), + ) -> dict: + """ + Note: [()] causes data to be copied to a numpy array + rather than just referencing + a h5py dataset (which goes out of scope after the context manager exits) + Axes at this level are: + x_dim: always 1 + y_dim: channelS_PER_MODULE * NUM_MODULES + counters: (always 3 counters). + + Reading nxs files is pretty fast - not really a bottleneck + + """ + + with h5pyFile(filepath, "r") as file: + try: + entry = file["entry"] + except Exception: + entry = file["entry1"] + + normalised_beam_intensity = self.beam_intensity / np.median( + self.beam_intensity + ) + + if (frame is not None) and (sum_frames is False): + # for when we want to only read a specific frame - ie time resolved + + self.wholedetector_raw_frames = entry["mythen_nx"]["data"][ + frame, :, self.default_counter + ][()] # [n, 17920, 3] where n is the number of frames, 3 = 3 counters + self.wholedetector_raw_frames = ( + self.wholedetector_raw_frames / normalised_beam_intensity[frame] + ) + + self.raw_frame_counts = {} + self.raw_frame_counts[frame] = self.wholedetector_raw_frames + self.logger.log( + f"Frame: {frame + 1}/{self.n_frames} | Delta: {self.deltas[frame]}" + ) + + elif (frame is None) and (sum_frames is True): + # we want to read all frames and then sum them, ie pump-probe mode + self.wholedetector_raw_frames = np.zeros_like( + entry["mythen_nx"]["data"][0, :, self.default_counter][()] + ) + + for frame in range(self.n_frames): + if frame in bad_frames: + self.logger.log(f"{frame} is a bad frame") + continue + + wholedetector_n_frame = entry["mythen_nx"]["data"][ + frame, :, self.default_counter + ][()] + wholedetector_n_frame_normalised = ( + wholedetector_n_frame / normalised_beam_intensity[frame] + ) + self.wholedetector_raw_frames = ( + self.wholedetector_raw_frames + wholedetector_n_frame_normalised + ) + + self.raw_frame_counts = {} + self.raw_frame_counts[0] = self.wholedetector_raw_frames + self.deltas = [np.mean(self.deltas)] + self.logger.log(f"Summing {self.n_frames} frames") + + elif (frame is None) and not (sum_frames): + # standard data reduction mode + self.wholedetector_raw_frames = entry["mythen_nx"]["data"][ + :, :, self.default_counter + ][()] # [n, 17920, 3] where n is the number of frames, 3 = 3 counters + self.raw_frame_counts = { + frame: self.wholedetector_raw_frames[frame, :] + for frame in range(len(self.wholedetector_raw_frames)) + } # coverts it from list into dict + self.logger.log(f"Deltas position(s): {self.deltas}") + self.logger.log( + f"Frames: {len(self.raw_frame_counts)}/{self.n_frames} | Specified frame: {frame}" # noqa + ) + + self.frames_range = list(self.raw_frame_counts.keys()) + + return ( + self.raw_frame_counts, + self.frames_range, + self.wholedetector_raw_frames, + ) + + def load_flatfield(self, flatfield_filepath: str) -> np.ndarray: + """ + + loads the flatfield file. The flatfield file is (usually) an + h5 file containing a calibrated beam on the detector. This + + allows to calibrate the response of the detector to the beam + ie. work out the efficiency of the detector + + the flatfield can then be used to adjust the raw counts to correct the raw data. + If flatfield correction is set to False then + + the entire flatfield is set to 1, such that it effectively makes no correction + + """ + + if self.apply_flatfield: + if not os.path.exists(flatfield_filepath): + self.logger.log("Flatfield file does not exist") + flatfield = np.full( + (self.STRIPS_PER_MODULE * self.MODULES_PER_DETECTOR), 1 + ) + + try: + with h5pyFile(flatfield_filepath, "r") as file: + if "flatfield" in file: + flatfield = file["flatfield"][()] + elif "flat_total_rescaled" in file: + flatfield = file["flat_total_rescaled"][()] + except Exception: + with h5pyFile(flatfield_filepath, "r") as file: + flatfield_tuple = file["data"][()] + flatfield = np.full( + (self.STRIPS_PER_MODULE * self.MODULES_PER_DETECTOR), 0 + ) + + for flatfield_frame in flatfield_tuple: + flatfield += flatfield_frame + + # flatfield = I11Reduction.NormalizeTo(flatfield,minval=0) + + return flatfield + + else: + flatfield = np.full((self.STRIPS_PER_MODULE * self.MODULES_PER_DETECTOR), 1) + return flatfield + + def split_flatfield(self) -> dict: + """ + + splits the raw_flatfield_counts into array of arrays, + where each array corresponds to the module counts using a white beam + + """ + if len(self.raw_flatfield_counts) == ( + self.STRIPS_PER_MODULE * self.MODULES_PER_DETECTOR + ): + flatfield_module_array = np.split( + self.raw_flatfield_counts, self.MODULES_PER_DETECTOR + ) + iter_modules = range(self.MODULES_PER_DETECTOR) + + elif ( + (len(self.modules_in_flatfield) != 0) + and ( + len(self.raw_flatfield_counts) + != (self.STRIPS_PER_MODULE * self.MODULES_PER_DETECTOR) + ) + and ( + (len(self.raw_flatfield_counts) / self.STRIPS_PER_MODULE) + == self.n_modules_in_data + ) + ): + flatfield_module_array = np.split( + self.raw_flatfield_counts, len(self.modules_in_flatfield) + ) + iter_modules = self.modules_in_flatfield + + flatfield_modules = {} + + for n, mod in enumerate(iter_modules): + flatfield_modules[mod] = flatfield_module_array[n] + + return flatfield_modules + + def save_nxs_outfile( + self, + reduced_nxs_filepath_out: str, + xyedata: pd.DataFrame, + module_raw_data: pd.DataFrame, + frame_data: pd.DataFrame, + angular_corrected_data: pd.DataFrame, + debug=False, + ) -> None: + """ + + Saves a hdf5 file suitable for analysis in dawn or calibration of the detector + + """ + + if not self.verbose_nxs: + columns_to_export = ["tth", "det_channel", "no_ff_corr", "counts"] + else: + columns_to_export = angular_corrected_data.columns + + self.logger.log(reduced_nxs_filepath_out) + + ##################################### + if os.path.exists(reduced_nxs_filepath_out): + os.remove(reduced_nxs_filepath_out) + print("remove") + + copy(self.filepath, reduced_nxs_filepath_out) + + with h5pyFile(self.filepath, "r", libver="latest", swmr=True) as file: + left_ring = file["entry"]["mythen_nx"]["data"][:, 0:17920, :][ + () + ] # [n, 17920, 3] where n is the number of frames, 3 = 3 counters + right_ring = file["entry"]["mythen_nx"]["data"][:, 17920::, :][ + () + ] # [n, 17920, 3] where n is the number of frames, 3 = 3 counters + + with h5pyFile(reduced_nxs_filepath_out, "a", libver="latest") as out_file: + ################################## + # save rings exactly as they were from the hdf5 file but split ring 1 and 2 + ################################## + print(out_file["entry"].keys()) + + out_file["entry"]["mythen_nx"]["ring1"] = left_ring + out_file["entry"]["mythen_nx"]["ring2"] = right_ring + + tth_sorted_data = angular_corrected_data.sort_values(by="tth") + + ################################## + # save fully reduced xye data + ################################## + + xye_group = out_file["entry"].create_group("xye") + out_file["entry"]["xye"].create_dataset( + "error", data=xyedata["error"].values, dtype="f" + ) + out_file["entry"]["xye"].create_dataset( + "counts", data=xyedata["counts"].values, dtype="f" + ) + out_file["entry"]["xye"].create_dataset( + "tth", data=xyedata["tth"].values, dtype="f" + ) + + xye_group.attrs["NX_class"] = "NXdata" + xye_group.attrs["signal"] = "counts" + xye_group.attrs["axes"] = ["tth"] + xye_group.attrs["tth_indices"] = [0] + + nxentry = out_file["entry"] + nxentry.attrs["default"] = "/entry/xye/counts" + + # out_file.attrs["default"] = "/entry/xye/counts" + + ################################## + # save all reduced modules seperately + ################################## + + out_file["entry"].create_group("modules") + out_file["entry"]["modules"]["active_modules"] = np.array( + self.active_modules + ) + + for column in columns_to_export: + column_array = np.zeros( + (len(self.active_modules), self.STRIPS_PER_MODULE * self.n_frames) + ) + + for n, module in enumerate(self.active_modules): + module_data = tth_sorted_data[tth_sorted_data["n_mod"] == module] + column_array[n, 0 : len(module_data[column].values)] = module_data[ + column + ].values + + out_file["entry"]["modules"][column] = column_array + + ################################## + # save all reduced frames seperately + ################################## + + out_file["entry"].create_group("frames") + out_file["entry"]["frames"]["frame_ids"] = np.arange(self.n_frames) + + for col in columns_to_export: + column_array = [] + for frame in frame_data.values(): + column_array.append(frame[col]) + column_array = np.array(column_array) + out_file["entry"]["frames"][col] = column_array + + ################################## + # save reduced rings seperately + ################################## + nxs_modules_group_ring1 = out_file["entry"].create_group("ring1") + + if np.amin(self.active_modules) < 14: + ring1 = angular_corrected_data[ + angular_corrected_data["n_mod"].isin(np.arange(0, 14, 1, dtype=int)) + ] + for col in columns_to_export: + nxs_modules_group_ring1[col] = ring1[col] + + nxs_modules_group_ring1.attrs["NX_class"] = "NXdata" + nxs_modules_group_ring1.attrs["signal"] = "counts" + nxs_modules_group_ring1.attrs["axes"] = ["tth"] + nxs_modules_group_ring1.attrs["tth_indices"] = [0] + + nxs_modules_group_ring2 = out_file["entry"].create_group("ring2") + + if np.amax(self.active_modules) > 14: + ring2 = angular_corrected_data[ + angular_corrected_data["n_mod"].isin( + np.arange(14, 28, 1, dtype=int) + ) + ] + + for col in columns_to_export: + nxs_modules_group_ring2[col] = ring2[col] + + nxs_modules_group_ring2.attrs["NX_class"] = "NXdata" + nxs_modules_group_ring2.attrs["signal"] = "counts" + nxs_modules_group_ring2.attrs["axes"] = ["tth"] + nxs_modules_group_ring2.attrs["tth_indices"] = [0] + + ############################# + # run debug processing + ############################## + + if debug: + guide = self.make_module_boundary_guide(len(self.active_modules)) + out_file["entry"]["guide"] = guide + + detchannel_data = angular_corrected_data.sort_values(by="det_channel") + + ring1_ffcorr = [] + ring2_ffcorr = [] + + ring1_ffcorr_flipped = [] + ring2_ffcorr_flipped = [] + + for frame in range(self.n_frames): + det_channel_frame = detchannel_data[ + detchannel_data["frame"] == frame + ] + det_channel_frame_ring1 = (det_channel_frame["counts"].values)[ + 0:17920 + ] + det_channel_frame_ring2 = (det_channel_frame["counts"].values)[ + 17920:: + ] + + flipped_frame = tth_sorted_data[tth_sorted_data["frame"] == frame] + flipped_frame_ring1 = (flipped_frame["counts"].values)[0:17920] + flipped_frame_ring2 = (flipped_frame["counts"].values)[17920::] + + ring1_ffcorr.append(det_channel_frame_ring1) + ring2_ffcorr.append(det_channel_frame_ring2) + + ring1_ffcorr_flipped.append(flipped_frame_ring1) + ring2_ffcorr_flipped.append(flipped_frame_ring2) + + ring1_ffcorr = np.array(ring1_ffcorr) + ring2_ffcorr = np.array(ring2_ffcorr) + ring1_ffcorr_flipped = np.array(ring1_ffcorr_flipped) + ring2_ffcorr_flipped = np.array(ring2_ffcorr_flipped) + + out_file["entry"]["frames"].create_dataset( + "ring1_ffcorr", data=ring1_ffcorr, dtype="f" + ) + out_file["entry"]["frames"].create_dataset( + "ring2_ffcorr", data=ring2_ffcorr, dtype="f" + ) + + out_file["entry"]["frames"].create_dataset( + "ring1_ffcorr_flipped", data=ring1_ffcorr_flipped, dtype="f" + ) + out_file["entry"]["frames"].create_dataset( + "ring2_ffcorr_flipped", data=ring2_ffcorr_flipped, dtype="f" + ) + + self.logger.log(f"Saving NXS file to: {reduced_nxs_filepath_out}") + + def align_modules_dict(self, deltas: np.ndarray) -> dict: + """ + + Creates a self.all_module_data which ia a dicitionary containing delta position + and module datae broken up into an accessable way + + self.all_module_data[n_frame][n_mod] + + n_frame may relate to a delta position or potentially the same delta + if running a time resolved experiment + + If flatfield correction is True in the config file + it will apply the flatfield correction + + """ + + self.all_module_data = {} # is a dictionary containing a load of dataframes. + # Each dict is self.all_module_data[n_frame][n_mod] = module_data_at_delta + + det_channels = np.arange( + self.STRIPS_PER_MODULE * len(self.active_modules), dtype=np.int64 + ) + module_det_channels = np.array_split(det_channels, len(self.active_modules)) + + start_bad_chans = np.arange(0, self.n_bad_edge_channels, 1) + end_bad_chans = np.arange( + self.STRIPS_PER_MODULE - self.n_bad_edge_channels, self.STRIPS_PER_MODULE, 1 + ) + + for n_frame, delta_pos in zip(self.frames_range, deltas, strict=True): + self.all_module_data[n_frame] = {} + counts_in_each_frame_and_module = np.array_split( + self.raw_frame_counts[n_frame], len(self.active_modules) + ) + + for n, (n_mod) in enumerate(self.active_modules): + # self.logger.log(n_frame, n_mod) + + # mod_start_chan = n_mod*self.STRIPS_PER_MODULE + # self.logger.log(n_mod, module_det_channels[n]) + + module_data_at_delta = pd.DataFrame() + module_data_at_delta["raw_tth"] = self.module_raw_tth[n_mod] + module_data_at_delta["tth"] = ( + module_data_at_delta["raw_tth"].values + delta_pos + ) + module_data_at_delta["mod_channel"] = self.module_raw_tth[ + "mod_channel" + ] # always 0-1280 for each module + module_data_at_delta["det_channel"] = module_det_channels[n] + module_data_at_delta["frame"] = n_frame + module_data_at_delta["delta_pos"] = delta_pos + module_data_at_delta["n_mod"] = n_mod + module_data_at_delta["no_ff_corr"] = counts_in_each_frame_and_module[n] + + # if flatfield is not enabled, + # the entire array is set to 1, so it makes no difference + + # self.logger.log(n_mod, self.flatfield_modules[n_mod]) + module_data_at_delta["counts"] = self.apply_flatfield_correction( + module_data_at_delta["no_ff_corr"].values, + self.flatfield_modules[n_mod], + ) + + module_data_at_delta["error"] = np.sqrt( + module_data_at_delta["counts"] + ) # poisson errors + + module_data_at_delta["badchannel"] = ( + (module_data_at_delta["det_channel"].isin(self.bad_channels)) + | (module_data_at_delta["mod_channel"].isin(start_bad_chans)) + | (module_data_at_delta["mod_channel"].isin(end_bad_chans)) + ) # new way + + self.all_module_data[n_frame][n_mod] = module_data_at_delta + + # plt.plot(module_data_at_delta["tth"],module_data_at_delta["counts"]) + # plt.plot(module_data_at_delta["tth"],module_data_at_delta["no_ff_corr"]) + # plt.show() + + return self.all_module_data + + def remove_bad_channels_modules_frames(self) -> pd.DataFrame: + if self.bad_channel_masking: + angular_corrected_data = self.angular_corrected_data_unmasked[ + (~self.angular_corrected_data_unmasked["n_mod"].isin(self.bad_modules)) + & (self.angular_corrected_data_unmasked["badchannel"] == False) # noqa + & (~self.angular_corrected_data_unmasked["frame"].isin(self.bad_frames)) + ] # keep non-bad modules #remove bad channels + + else: + angular_corrected_data = self.angular_corrected_data_unmasked[ + (~self.angular_corrected_data_unmasked["n_mod"].isin(self.bad_modules)) + & (~self.angular_corrected_data_unmasked["frame"].isin(self.bad_frames)) + ] # keep non-bad modules only + + return angular_corrected_data + + def concatenate_frames_and_modules(self) -> pd.DataFrame: + """ + + it contatenates the data in self.all_module_data and then appends + it into a dataframe containing lots of info. Then remove the bad channels + + I suspect when fast_shutter_mode is available we would probably want to iterate + frames first, modules second and build a + self.frame_outputdata dict instead of modules + + This way we could iterate the frames and save an xye for each frame. Which means + we wouldn't concatenate everything into a dataframe, we would concatenate all + + the modules together and be able to look frame by frame + + """ + + angular_corrected_data_unmasked = pd.DataFrame() + + for n_mod, n_frame in product(self.active_modules, self.frames_range): + angular_corrected_data_unmasked = pd.concat( + [angular_corrected_data_unmasked, self.all_module_data[n_frame][n_mod]], + axis=0, + ) + + angular_corrected_data_unmasked = angular_corrected_data_unmasked.sort_values( + by="tth", ascending=True + ) + angular_corrected_data_unmasked = angular_corrected_data_unmasked.reset_index() + + del self.all_module_data + + return angular_corrected_data_unmasked + + def check_active_modules(self) -> bool: + """ + + checks to see if the modules specified in the config are + correct for the data shape. If not it will try to infer the correct shape. + + """ + + self.logger.log(f"\nModules in data: {self.n_modules_in_data}") + + if (len(self.active_modules) != self.n_modules_in_data) and ( + os.path.exists(self.mythen3_config_dir) + ): + self.logger.log( + f"\nNumber of active modules in {self.config_filepath} does not reflect data!!!!" # noqa + ) + self.logger.log("Modules will be determined from mythen3 config") + self.active_modules = I11Reduction.read_config(self.mythen3_config_dir) + + if (len(self.active_modules) != self.n_modules_in_data) and ( + self.n_modules_in_data == 14 + ): + self.logger.log("Modules will be determined by using a range()") + self.active_modules = np.arange(self.n_modules_in_data, dtype=int) + + elif (len(self.active_modules) != self.n_modules_in_data) and ( + self.n_modules_in_data == 28 + ): + self.logger.log("Modules will be determined by using a range()") + self.active_modules = np.arange(self.n_modules_in_data, dtype=int) + + self.logger.log(f"Using = {self.active_modules}", "\n") + + if len(self.active_modules) != self.n_modules_in_data: + self.logger.log( + f"The modules must be specified correctly in active_modules in: {self.config_filepath}" # noqa + ) + quit() + + return True + + @staticmethod + def calculate_wavelength(beam_energy: float) -> float: + """ + + Calculates wavelength (Angstrom) from beam energy in kev. + + To allow convertion of tth to Q space, using the energy of the beam. + beam energy is converted to wavlength because it's better + + """ + + beam_energy_ev = beam_energy * 1000 + ev_to_j, h_planck, c_speed_of_light = ( + 1.602176634e-19, + 6.62607015e-34, + 299792458.0, + ) # electron volt-joule relationship (in J), plancks constant and speeed of l + beam_energy_j = beam_energy_ev * ev_to_j + wavelength_m = (h_planck * c_speed_of_light) / (beam_energy_j) + wavelength = wavelength_m * 1e10 + + return wavelength + + def create_bins(self, tth_values: np.ndarray, rebin_step) -> np.ndarray: + """ + Return a suitable set of bin centres, and edges for histogramming this data. + + To match old GDA mythen2 behaviour, want start and + stop to align with "multiples" of rebin step + (as far as f.p. arithmetic allows this...). + + """ + mintth, maxtth = np.amin(tth_values), np.amax(tth_values) + start = np.round((mintth / rebin_step), decimals=3) * rebin_step + stop = np.round((maxtth / rebin_step), decimals=3) * rebin_step + + # start = mintth + # stop = maxtth + # self.logger.log("Min2th:",f'{start:.3f}'," | ","Max2th:",f"{stop:.3f}","\n") + + bin_edges = np.arange( + start=start - (rebin_step / 2), + stop=stop + rebin_step + (rebin_step / 2), + step=rebin_step, + dtype=np.float64, + ) + bin_centres = 0.5 * (bin_edges[1:] + bin_edges[:-1]) + + return bin_centres, bin_edges + + def bin_and_propagate_errors( + self, x: np.ndarray, y: np.ndarray, e: np.ndarray, error_calc: str = "poisson" + ) -> np.ndarray: + """ + + The bin centres and edges are calculated and used to bin the data. + Binning of the data is done used searchsorted == np.digitize. + + Because we want to propagate the errors we will iterate though all the values + of x, y and e that need to be binned together and propagate the errors + + Errors can be calculated using internal error = error propagation, external + error std_dev of error or we can take the greatest of the two values. + Which is probabaly the best idea. + + If you have a high spread of data (high noise), ie peaks with weak intensity + surely the error can't be less than the spread. + But equally if you have very large peaks with low spread the + + error should reflect that. + + """ + + bin_centres, bin_edges = self.create_bins(x, self.rebin_step) + + if ( + x[-1] == bin_edges[-1] + ): # if the last value is exactly equal to the final bin edge it will be lost. + x[-1] = x[-1] - ( + self.rebin_step / 10000 + ) # I think it would be better to move it inside bin edge, + # and include, rather than remove all together or create bin with 1 value + + sums, bin_edges = np.histogram(x, bins=bin_edges, weights=y) + counts = np.histogram(x, bins=bin_edges)[0] + mean_counts = ( + sums / counts + ) # this will throw a warning if there are missing counts + + e_sums = np.histogram( + x, bins=bin_edges, weights=e**2 + )[ + 0 + ] # https://faraday.physics.utoronto.ca/PVB/Harrison/ErrorAnalysis/Propagation.html + prop_errors = np.sqrt(e_sums) / counts + + repeated_mean = np.repeat(mean_counts, counts) + std_sums = np.histogram(x, bins=bin_edges, weights=(y - repeated_mean) ** 2)[0] + std_errors = np.sqrt(std_sums / counts) + + if error_calc == "poisson": + errors = prop_errors + elif error_calc == "std_dev": + errors = std_errors + elif error_calc == "max": + errors = np.where(prop_errors > std_errors, prop_errors, std_errors) + else: + raise ValueError( + f"Invalid error_calc value: {error_calc}. Must be 'poisson', 'std_dev', or 'max'." # noqa + ) + + return bin_centres, bin_edges, mean_counts, errors + + def bin_data( + self, angular_corrected_data: pd.DataFrame, error_calc: str + ) -> pd.DataFrame: + """ + + creates the bins, fins the bins centres (which gives the 2th angle) + Then sticks this all in a dataframe called xyedata with tth, + counts, error and if wavelength is provided Q + + """ + + rebinned_tth, tth_bin_edges, rebinned_counts, errors = ( + self.bin_and_propagate_errors( + angular_corrected_data["tth"].values, + angular_corrected_data["counts"].values, + angular_corrected_data["error"].values, + error_calc, + ) + ) + + xyedata = pd.DataFrame() + + xyedata["tth"] = rebinned_tth + xyedata["counts"] = rebinned_counts + xyedata["error"] = errors + + xyedata = xyedata[ + (xyedata["counts"] != 0) & (~xyedata["counts"].isnull()) + ] # remove no counts #remove null counts + + if (self.beam_energy) and (self.save_in_q_space): + q_space = tth_to_q(xyedata["tth"].to_numpy(), self.wavelength) + xyedata["Q"] = q_space + + return xyedata + + def save_xye( + self, xye_filepath_out: str, xyedata: pd.DataFrame, x: str + ) -> np.ndarray: + """ + + given a filepath out, and a dataframe containing some + x axis (Q or tth) and an x axis label + + it concatenated the data into a ascii format and then saves it + + """ + + xye_out_data = np.stack( + (xyedata[x].values, xyedata["counts"].values, xyedata["error"].values), + axis=-1, + ) + + np.savetxt( + xye_filepath_out, xye_out_data, fmt="%.6f", delimiter=" ", newline="\n" + ) + + self.logger.log(f"Saving xye to: {xye_filepath_out}") + + return xye_out_data + + def split_data(self, unmasked: bool = False): + """ + + splits data into frames and modules, depending on how you want to + look at the data, creates self.frame_data and self.module_raw_data + + """ + + if unmasked: + data_to_split = self.angular_corrected_data_unmasked + else: + data_to_split = self.angular_corrected_data + + frame_data = { + frame: data_to_split[data_to_split["frame"] == frame] + for frame in data_to_split.frame.unique() + } + module_raw_data = { + n_mod: data_to_split[data_to_split["n_mod"] == n_mod] + for n_mod in data_to_split.n_mod.unique() + } + + return frame_data, module_raw_data + + def load_toml_config(self) -> bool: + """ + + Loads the config from a toml file for the data reduction. + Returns true when success. + + """ + + if not os.path.exists(self.config_filepath): + self.logger.log("Config file does not exist") + quit() + + with open(self.config_filepath, "rb") as file: + self.logger.log(f"Using config: {self.config_filepath}") + + self.config = load(file) + + self.logger.log("\n") + self.mythen3_config_dir = self.config["mythen3_detector_config"] + + if self.flatfield_filepath is None: + self.flatfield_filepath = self.config["flatfield_filepath"] + + if self.apply_flatfield is None: + self.apply_flatfield = self.config["apply_flatfield"] + + if self.active_modules is None: + self.active_modules = self.config["active_modules"] + self.active_modules.sort() + + if self.bad_modules is None: + self.bad_modules = self.config["bad_modules"] + + self.bad_channel_masking = self.config["bad_channel_masking"] + self.default_counter = self.config["default_counter"] + self.n_bad_edge_channels = self.config["edge_bad_channels"] + self.rebin_step = self.config["rebin_step"] + self.beam_energy = self.config["beam_energy"] + + if self.beamline_offset is None: + self.beamline_offset = self.config.get("beamline_offset") + + self.save_nxs_out = self.config["save_nxs_out"] + self.out_raw_data = self.config["out_raw_data"] + self.save_in_q_space = self.config["save_in_Q_space"] + self.debug_mode = self.config["debug_mode"] + self.modules_in_flatfield = self.config["modules_in_flatfield"] + self.send_to_ispyb = self.config["send_to_ispyb"] + + if self.angcal_filepath is None: + self.angcal_filepath = self.config["angcal_filepath"] + + if self.data_reduction_mode is None: + self.data_reduction_mode = int(self.config["data_reduction_mode"]) + + self.error_calc = self.config["error_calc"] + self.verbose_nxs = self.config["verbose_nxs"] + self.bad_channels_filepath = self.config["bad_channels_filepath"] + + self.logger.log("Active modules:", self.active_modules) + self.logger.log("Bad modules:", self.bad_modules) + self.logger.log("Bad frames:", self.bad_frames) + self.logger.log("Beam energy (keV):", self.beam_energy) + self.logger.log("Beamline offset:", self.beamline_offset) + self.logger.log("Flatfield filepath:", self.flatfield_filepath) + self.logger.log("Saving in Q space:", self.save_in_q_space) + self.logger.log("Saving in NXS:", self.save_nxs_out) + self.logger.log("Apply Flatfield:", self.apply_flatfield) + self.logger.log("Using counter:", self.default_counter) + self.logger.log( + "Number of bad channels at module edge:", self.n_bad_edge_channels + ) + self.logger.log("Rebin step:", self.rebin_step) + + data_reduction_mode_dict = { + 0: "standard", + 1: "time-resolved", + 2: "pump-probe", + 3: "flatfield", + } + + self.logger.log( + "Data reduction mode:", data_reduction_mode_dict[self.data_reduction_mode] + ) + + return True + + def set_save_filepaths(self) -> bool: + if not self.xye_filepath_out: + self.xye_filepath_out = os.path.join( + self.file_dir, + f"{self.file_name}_summed_mythen3{self.filename_suffix}.xye", + ) + + if not os.path.exists(os.path.join(self.file_dir, "processed")): + os.makedirs(os.path.join(self.file_dir, "processed")) + + if not self.reduced_nxs_filepath_out: + self.reduced_nxs_filepath_out = os.path.join( + self.file_dir, + "processed", + f"{self.file_name}_reduced_mythen3{self.filename_suffix}.nxs", + ) + + if not self.xye_filepath_out_q: + self.xye_filepath_out_q = os.path.join( + self.file_dir, + f"{self.file_name}_summed_mythen3_Q{self.filename_suffix}.xye", + ) + + return True + + def _refine_rebin(self): + best_so_far = [[1e-8, 1e19]] + + for n, new_rebin in enumerate( + np.linspace( + self.rebin_step / 10, self.rebin_step + (self.rebin_step / 10), 10000 + ) + ): + bin_centres, bin_edges = self.create_bins( + self.angular_corrected_data["tth"].values, new_rebin + ) + + sums, bin_edges = np.histogram( + self.angular_corrected_data["tth"].values, + bins=bin_edges, + weights=self.angular_corrected_data["counts"].values, + ) + counts = np.histogram( + self.angular_corrected_data["tth"].values, bins=bin_edges + )[0] + + if np.amin(counts) == 0: + continue + + # mean_counts = ( + # sums / counts + # ) # this will throw a warning if there are + # missing counts in a bin as a result of missing module + + bin_centres_repeated = np.repeat(bin_centres, counts) + + chi = np.sum( + np.abs(bin_centres_repeated - self.angular_corrected_data["tth"].values) + ) * len(bin_centres) + + if n % 100 == 0: + self.logger.log(new_rebin) + + if chi < best_so_far[-1][1]: + best_so_far.append([new_rebin, chi]) + self.logger.log(new_rebin, chi) + + best_rebin = best_so_far[-1][0] + + return best_rebin + + def plot_modules(self, block=True): + for n_mod in self.active_modules: + n_mod_theta = self.module_raw_tth[n_mod] + plt.plot([n_mod] * 1280, n_mod_theta) + + plt.xlabel("module number") + plt.ylabel("angle tth") + plt.show(block=block) + if block is True: + plt.close() + + def plot_modules_by_ring(self, mask=(), output_folder="./outputs", block=True): + plt.figure(figsize=(10, 4)) + + modules_min_max = {} + + for n_mod in self.active_modules: + if n_mod in mask: + continue + + n_mod_theta = self.module_raw_tth[n_mod] + if n_mod <= 13: + plt.plot(n_mod_theta, [0] * 1280, label=str(n_mod)) + plt.text(n_mod_theta[640], 0.1, str(n_mod), fontsize=8) + else: + plt.plot(n_mod_theta, [1] * 1280, label=str(n_mod)) + plt.text(n_mod_theta[640], 0.9, str(n_mod), fontsize=8) + + modules_min_max[n_mod] = [float(min(n_mod_theta)), float(max(n_mod_theta))] + + plt.ylabel("Ring number") + plt.yticks([0, 1]) + plt.xlabel("Angle (tth)") + plt.savefig(os.path.join(output_folder, "module_arrangment.png")) + plt.show(block=block) + if block is True: + plt.close() + + total_degrees = np.amax(self.module_raw_tth[0]) - np.amin( + self.module_raw_tth[13] + ) + + radius = 762 + circum = 2 * 3.14159 * radius + + length_of_arc = circum * (total_degrees / 360) + + mm_per_degree = length_of_arc / total_degrees + print("Total Angular Coverage", total_degrees) + print("Radius of detector (mm):", 762) + print("mm/tth", mm_per_degree) + + module_tth_spans = [] + module_sizes = [] + print(len(self.active_modules)) + print(len(self.good_modules)) + + spec_module_size = 1280 * 0.05 + + for n_mod in list(self.good_modules): + module_1 = modules_min_max[n_mod] + module_tth_span = np.amax(module_1) - np.amin(module_1) + module_tth_spans.append(module_tth_span) + module_size = module_tth_span * mm_per_degree + module_sizes.append(module_size) + + mm_per_deg_size = spec_module_size / module_tth_span + + print(n_mod, module_tth_span, module_size, mm_per_deg_size) + + fig, ax1 = plt.subplots(figsize=(10, 7)) + ax1.scatter(list(self.good_modules), module_tth_spans) + ax1.set_ylabel("Size (tth)") + ax2 = ax1.twinx() + + ax2.scatter(list(self.good_modules), module_sizes) + ax2.set_ylabel("Size (mm)") + ax1.set_xlabel("Module") + plt.savefig(os.path.join(output_folder, "sizes.png")) + plt.close() + + for n_mod in self.active_modules[0:-1]: + if n_mod == 13: + continue + + n_mod1 = n_mod + n_mod2 = n_mod + 1 + + module_1 = modules_min_max[n_mod1] + module_2 = modules_min_max[n_mod2] + + sorted_modules = np.sort(np.concatenate((module_1, module_2))) + + diff = mm_per_degree * (sorted_modules[2] - sorted_modules[1]) + + print("Modules:", n_mod1, n_mod2) + print("Sorted Module Edges (tth):", sorted_modules) + print("Gap (mm)", diff, "\n") + + mod1spans = [] + mod2spans = [] + + for mod1, mod2 in paired_modules(): + n_mod1_theta = self.module_raw_tth[mod1] + mod1span = np.amax(n_mod1_theta) - np.amin(n_mod1_theta) + n_mod2_theta = self.module_raw_tth[mod2] + mod2span = np.amax(n_mod2_theta) - np.amin(n_mod2_theta) + + if mod1 in [11, 17, 27]: + mod1spans.append(np.nan) + else: + mod1spans.append(mod1span) + + if mod2 in [11, 17, 27]: + mod2spans.append(np.nan) + else: + mod2spans.append(mod2span) + + plt.plot(np.array(mod1spans) * mm_per_degree) + plt.plot(np.array(mod2spans) * mm_per_degree) + plt.ylabel("size (mm)") + plt.xlabel("Index from module") + plt.savefig(os.path.join(output_folder, "module_compare.png")) + plt.show() + + def plot_by(self, parameters=(), x="tth", at_a_time=False): + if isinstance(parameters, str): + parameters = [parameters] + + for parameter in parameters: + for val in np.unique(self.angular_corrected_data[parameter]): + parameter_data = self.angular_corrected_data[ + self.angular_corrected_data[parameter] == val + ] + p = plt.scatter( + parameter_data[x], parameter_data["counts"], label=str(val), s=2 + ) + col = p.get_facecolors()[-1].tolist() + plt.text( + np.median(parameter_data[x]), + -np.amax(self.angular_corrected_data["counts"]) / 30, + str(val), + color=col, + ) + + if at_a_time: + plt.legend() + plt.xlabel("Angle (tth)") + plt.ylabel("Intensity (arb. units)") + plt.show() + + if not at_a_time: + plt.legend() + plt.xlabel("Angle (tth)") + plt.ylabel("Intensity (arb. units)") + plt.show() + + def plot_module_offsets(self, mask=()): + plt.figure(figsize=(10, 4)) + + ring_1_angles = {} + ring_2_angles = {} + + for n_mod in self.active_modules: + if n_mod in mask: + continue + + n_mod_theta = self.module_raw_tth[n_mod] + if n_mod <= 13: + ring_1_angles[n_mod] = n_mod_theta + + else: + ring_2_angles[n_mod] = n_mod_theta + + ring_1_array = np.array(list(ring_1_angles.values())).flatten() + ring_1_diff = np.gradient(ring_1_array) + + ring_2_array = np.array(list(ring_2_angles.values())).flatten() + ring_2_diff = np.gradient(ring_2_array) + + ring1_steps = ring_1_diff[np.abs(ring_1_diff) > 1] + ring2_steps = ring_2_diff[np.abs(ring_2_diff) > 1] + + for x, y in zip(ring_1_angles.keys(), ring1_steps, strict=True): + print(x, y) + + for x, y in zip(ring_2_angles.keys(), ring2_steps, strict=True): + print(x, y) + + plt.plot(ring_1_diff, label="ring1") + plt.plot(ring_2_diff, label="ring2") + plt.legend() + plt.show() + + def plot_module_counts(self, block=True): + plt.figure() + + for n_mod in self.active_modules: + if n_mod in self.angular_corrected_data["n_mod"].values: + plt.bar(n_mod, np.sum(self.module_raw_data[n_mod])) + + plt.xlabel("module number") + plt.ylabel("module raw counts") + plt.show(block=block) + if block is True: + plt.close() + + def plot_diffraction(self, out_only=True, filepath=None): + plt.figure(figsize=(15, 10)) + + if not out_only: + for n_frame in self.frame_data.keys(): + framedata = self.frame_data[n_frame] + plt.plot(framedata["tth"], framedata["counts"], label=n_frame) + + plt.errorbar( + self.xyedata["tth"], + self.xyedata["counts"], + self.xyedata["error"], + label=self.error_calc, + ) + plt.legend() + plt.xlabel("tth") + plt.ylabel("Intensity (arb. units)") + + if filepath: + plt.savefig(filepath) + + plt.show() + plt.close() + + def plot_raw_vs_xye(self): + fig, axes = plt.subplots(2) + + axes[0].step( + self.angular_corrected_data["tth"], + self.angular_corrected_data["counts"], + label="ff corrected counts", + color="k", + ) + axes[0].plot(self.xyedata["tth"], self.xyedata["counts"], label="xye") + axes[0].legend() + + axes[1].step( + self.angular_corrected_data["tth"], + self.angular_corrected_data["no_ff_corr"], + label="ff uncorrected counts", + color="k", + ) + axes[1].plot(self.xyedata["tth"], self.xyedata["counts"], label="xye") + + axes[1].legend() + plt.show() + + def plot_by_region_of_interest(self, peaks, tol=0.03, filepath=None): + fig = plt.figure(figsize=(15, 10)) + + max_rows = 4 + max_cols = 4 + + gs = GridSpec(max_rows, max_cols, figure=fig) # upper bound on plots + + i = 0 + + for peak in np.sort(peaks): + if i > 15: + break + + region_of_interest = self.angular_corrected_data[ + (self.angular_corrected_data["tth"] > peak - tol) + & (self.angular_corrected_data["tth"] < peak + tol) + ] + + present_modules = np.unique(region_of_interest["n_mod"]) + + if len(region_of_interest) == 0: # or (len(present_modules) < 2): + continue + + row = i // max_rows + col = i % max_cols + + ax = fig.add_subplot(gs[row, col]) + + for n_mod in present_modules: + mod_data = region_of_interest[region_of_interest["n_mod"] == n_mod] + ax.scatter(mod_data["tth"], mod_data["counts"], label=str(n_mod)) + ax.vlines(peak, np.min(mod_data["counts"]), np.max(mod_data["counts"])) + ax.legend() + + i = i + 1 + + plt.xlabel("tth") + plt.ylabel("Intensity (arb. units)") + if filepath: + plt.savefig(filepath) + plt.show() + plt.close() + + def plot_diffraction_by_mod(self, filepath=None, block=True): + plt.figure(figsize=(15, 10)) + + for n_mod in np.unique(self.angular_corrected_data["n_mod"]): + mod_data = self.angular_corrected_data[ + self.angular_corrected_data["n_mod"] == n_mod + ] + plt.scatter(mod_data["tth"], mod_data["counts"], label=str(n_mod)) + plt.text( + np.median(mod_data["tth"]), np.amin(mod_data["counts"]), str(n_mod) + ) + + plt.xlabel("tth") + plt.ylabel("Intensity (arb. units)") + plt.legend() + + if filepath: + plt.savefig(filepath) + + plt.show(block=block) + if block is True: + plt.close() + + def plot_rings(self): + ringmod0_13 = self.angular_corrected_data[ + self.angular_corrected_data["n_mod"].isin(np.arange(0, 14, 1, dtype=int)) + ] + ringmod14_27 = self.angular_corrected_data[ + self.angular_corrected_data["n_mod"].isin(np.arange(14, 28, 1, dtype=int)) + ] + plt.errorbar( + ringmod0_13["tth"], + ringmod0_13["counts"], + ringmod0_13["error"], + label="ring1", + ) + plt.errorbar( + ringmod14_27["tth"], + ringmod14_27["counts"], + ringmod14_27["error"], + label="ring2", + ) + plt.show() + plt.close() + + def make_module_boundary_guide(self, nmodules): + guide = np.zeros([nmodules * 1280]) + + for mod in range(nmodules): + guide[(mod - 1) * 1280 : ((mod - 1) * 1280) + 10] = 100000000000 + + return guide + + def return_outliers( + self, + factor: int | float = 3, + low_bound: float | None = None, + plot: bool = False, + ) -> None: + """ + This is used to return bad pixels. + This should only be run on a scan conducted on water at high angles ( + or something else that scatters very flat) - + otherwise the results are invalid""" + + all_bad_channels = np.array([], dtype=int) + + for n_mod in np.unique(self.angular_corrected_data["n_mod"]): + hist_model = "fd" + + mod_data = self.angular_corrected_data[ + self.angular_corrected_data["n_mod"] == n_mod + ] + + hist, bin_edges = np.histogram(mod_data["counts"].values, bins=hist_model) + mean_hist = np.mean(bin_edges) + std_hist = np.std(bin_edges) + stdfact = 1.5 * std_hist + + print("hist", mean_hist, std_hist, mean_hist - stdfact, mean_hist + stdfact) + + if plot: + plt.hist( + mod_data["counts"].values, bins=hist_model + ) # arguments are passed to np.histogram + plt.title(f"Histogram with {hist_model} bins") + plt.show() + + median_count = np.median(mod_data["counts"]) + stddev = np.std(mod_data["counts"]) + + low_data_points = mod_data[(mod_data["counts"] < median_count / factor)] + high_data_points = mod_data[(mod_data["counts"] > median_count * factor)] + + low_channels = low_data_points["det_channel"].values + high_channels = high_data_points["det_channel"].values + + bad_channels = np.sort(np.unique(np.append(low_channels, high_channels))) + all_bad_channels = np.append(all_bad_channels, bad_channels) + + print(n_mod, bad_channels, median_count, stddev) + + if low_bound: + low_bound_points = mod_data[(mod_data["counts"] < low_bound)] + low_bound_channels = low_bound_points["det_channel"].values + + if len(low_bound_channels) > 0: + print("\n", "low bound", low_bound_channels, "\n") + + if plot: + plt.scatter(mod_data["det_channel"], mod_data["counts"], label=n_mod) + plt.scatter( + bad_channels, [median_count] * len(bad_channels), color="red" + ) + plt.legend() + plt.show() + + for bc in all_bad_channels: + print(bc) + + def data_reduction_mode_standard(self): + # standard data reduction + + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath) + ) + # self.ffcorr = self.ffcorr_calc(self.wholedetector_raw_frames) + + self.all_module_data = self.align_modules_dict( + self.deltas + ) # its a dict of dataframes + + self.angular_corrected_data_unmasked = self.concatenate_frames_and_modules() + self.angular_corrected_data = self.remove_bad_channels_modules_frames() + + self.frame_data, self.module_raw_data = self.split_data( + unmasked=self.out_raw_data + ) # if this is done after remove bad channels and modules + self.xyedata = self.bin_data( + self.angular_corrected_data, error_calc=self.error_calc + ) + + #####save data + self.save_xye(self.xye_filepath_out, self.xyedata, "tth") + + if (self.save_in_q_space) and (self.beam_energy): + self.save_xye(self.xye_filepath_out_q, self.xyedata, "Q") + + if self.save_nxs_out: + try: + self.save_nxs_outfile( + self.reduced_nxs_filepath_out, + self.xyedata, + self.module_raw_data, + self.frame_data, + self.angular_corrected_data_unmasked, + debug=self.debug_mode, + ) + except Exception as e: + self.logger.log(e, self.filepath, "is open?") + + def data_reduction_mode_time_resolved(self): + ###where every frame is a unique dataset and you want lots of final xye's + # This iterates through every frame and load them + # seperately because for large datasets it will eat up memory + + for n_frame in range(self.n_frames): + self.logger.log(f"Analysing frame: {n_frame}") + + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath, frame=n_frame) + ) + self.all_module_data = self.align_modules_dict( + [self.deltas[n_frame]] + ) # align all modules for the specfic frame of data + self.angular_corrected_data_unmasked = self.concatenate_frames_and_modules() + self.angular_corrected_data = self.remove_bad_channels_modules_frames() + self.frame_data, self.module_raw_data = self.split_data( + unmasked=self.out_raw_data + ) # if this is done after remove bad channels and modules + self.xyedata = self.bin_data( + self.angular_corrected_data, error_calc=self.error_calc + ) + + self.save_xye( + self.xye_filepath_out.replace( + ".xye", f"_frame_{n_frame + 1}{self.filename_suffix}.xye" + ), + self.xyedata, + "tth", + ) + if (self.save_in_q_space) and (self.beam_energy): + self.save_xye( + self.xye_filepath_out_q.replace( + ".xye", f"_frame_{n_frame + 1}{self.filename_suffix}.xye" + ), + self.xyedata, + "Q", + ) + + def data_reduction_mode_pump_probe(self): + # pump probe + + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath, sum_frames=True) + ) + self.all_module_data = self.align_modules_dict( + self.deltas + ) # its a dict of dataframes + self.angular_corrected_data_unmasked = self.concatenate_frames_and_modules() + self.angular_corrected_data = self.remove_bad_channels_modules_frames() + self.frame_data, self.module_raw_data = self.split_data( + unmasked=self.out_raw_data + ) # if this is done after remove bad channels and modules + self.xyedata = self.bin_data( + self.angular_corrected_data, error_calc=self.error_calc + ) + + #####save data + + self.save_xye(self.xye_filepath_out, self.xyedata, "tth") + + if (self.save_in_q_space) and (self.beam_energy): + self.save_xye(self.xye_filepath_out_q, self.xyedata, "Q") + + if self.save_nxs_out: + self.save_nxs_outfile( + self.reduced_nxs_filepath_out, + self.xyedata, + self.module_raw_data, + self.frame_data, + self.angular_corrected_data, + debug=self.debug_mode, + ) + + def data_reduction_mode_flatfield(self, cleanup=True, peak_centre=80.67, tol=3.05): + # flatfield + """ + This assumes that the angular calibration is correct, + if it isn't then the peak centre will be wrong and the flatfield will be wrong. + Do the angular calibration first, then run this. + """ + + from datetime import datetime + + ###analyse the middle frame (where we hope the peak is present) + # throw away bad channels, and find the peak maxima. + # If this is a flatfield, that peak will always be at that tth + # + + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath, frame=int(self.n_frames / 2)) + ) + self.all_module_data = self.align_modules_dict( + [self.deltas[int(self.n_frames / 2)]] + ) # its a dict of dataframes + self.angular_corrected_data_unmasked = self.concatenate_frames_and_modules() + self.angular_corrected_data = self.remove_bad_channels_modules_frames() + + max_index = np.argmax(self.angular_corrected_data["counts"]) + peak_centre = (self.angular_corrected_data["tth"].values)[max_index] + + new_flatfield = np.full((len(self.active_modules) * 1280), 0) + normalised_beam_intensity = self.beam_intensity / np.median(self.beam_intensity) + + new_flatfield = np.full((len(self.active_modules) * 1280), 0) + + for n_frame in range(self.n_frames): + self.logger.log( + f"Analysing frame: {n_frame}, Beam: {normalised_beam_intensity[n_frame]}" # noqa + ) + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath, frame=n_frame) + ) + + beam_normalised_flatfield = ( + self.wholedetector_raw_frames / normalised_beam_intensity[n_frame] + ) + + if cleanup: + tth = self.deltas[n_frame] + self.whole_data_raw_tth + tth_throw_index = np.where( + ~((tth < (peak_centre + tol)) & (tth > (peak_centre - tol))) + )[0] + beam_normalised_flatfield[tth_throw_index] = 0 + + peak_counts = beam_normalised_flatfield[beam_normalised_flatfield != 0] + + if len(peak_counts) == 0: + maxx = 10 + else: + maxx = np.median(peak_counts) * 1000 + + self.logger.log(maxx) + + count_throw_index = np.where(beam_normalised_flatfield > maxx)[0] + beam_normalised_flatfield[count_throw_index] = 0 + + new_flatfield = new_flatfield + beam_normalised_flatfield + + new_flatfield = new_flatfield / np.median(new_flatfield) + + count_throw_index = np.where(new_flatfield > 10)[0] + new_flatfield[count_throw_index] = 0 + + datetimestr = datetime.now().strftime("%Y-%m-%d") # _%H:%M") + + if not self.out_directory: + save_dir = "/dls_sw/i11/software/mythen3/diamond/flatfield" + else: + save_dir = self.out_directory + + flatfield_dir_flatfield_save_path = os.path.join( + save_dir, + f"{self.file_name}_flatfield_{datetimestr}{self.filename_suffix}.h5", + ) + + with h5pyFile(flatfield_dir_flatfield_save_path, "w") as out_file: + out_file.create_dataset("flatfield", data=new_flatfield) + + self.logger.log( + f"New flatfield has been saved to {flatfield_dir_flatfield_save_path}" + ) + + def data_reduction_mode_0_fast(self): + # standard fast - testing + + for n_frame, delta in range(self.n_frames), self.deltas: + self.raw_frame_counts, self.frames_range, self.wholedetector_raw_frames = ( + self.read_nxs_data(self.filepath, frame=n_frame) + ) + self.all_module_data = self.align_modules_dict( + [delta] + ) # its a dict of dataframes + + self.angular_corrected_data_unmasked = self.concatenate_frames_and_modules() + self.angular_corrected_data = self.remove_bad_channels_modules_frames() + self.frame_data, self.module_raw_data = self.split_data( + unmasked=self.out_raw_data + ) # if this is done after remove bad channels and modules + self.xyedata = self.bin_data( + self.angular_corrected_data, error_calc=self.error_calc + ) + + #####save data + + self.save_xye(self.xye_filepath_out, self.xyedata, "tth") + + if (self.save_in_q_space) and (self.beam_energy): + self.save_xye(self.xye_filepath_out_q, self.xyedata, "Q") + + if self.save_nxs_out: + self.save_nxs_outfile( + self.reduced_nxs_filepath_out, + self.xyedata, + self.module_raw_data, + self.frame_data, + self.angular_corrected_data, + debug=self.debug_mode, + ) + + if self.debug_mode: + self.debug_reduction() + + def communicate_with_control(self, send_to_ispyb: bool = False): + """ + Attempts to connect to i11-control and send a message indicating + that a file has been processed. This will cause gda to plot the latest file + + Also may send xye to ispyb so that users can lookup data + + """ + + try: + daq = Messenger("i11-control") + daq.connect() + daq.send_file(str(self.xye_filepath_out)) # sends message to GDA + + if send_to_ispyb: + p = Path(self.filepath) + magic_path = p.parent / ".ispyb" / (p.stem + "_mythen_nx/data.dat") + copy2(self.xye_filepath_out, magic_path) # copies to ispyb + + except Exception as e: + self.logger.log(f"{e}: No messenger") + + def __init__( + self, + filepath: str | None = None, + reduced_nxs_filepath_out: str | None = None, + xye_filepath_out: str | None = None, + xye_filepath_out_q: str | None = None, + out_directory: str | None = None, + config_filepath: str | None = None, + beam_energy: float | None = None, + data_reduction_mode: int | None = None, + bad_frames: list[int] | None = None, + bad_modules: list[int] | None = None, + beamline_offset: float | None = None, + active_modules: list[int] | None = None, + flatfield_filepath: str | None = None, + apply_flatfield: bool | None = None, + angcal_filepath: str | None = None, + filename_suffix: str = "", + live: bool | None = False, + execute_reduction: bool | None = True, + logging: bool = True, + ): + self.reduced_nxs_filepath_out = reduced_nxs_filepath_out + self.xye_filepath_out = xye_filepath_out + self.xye_filepath_out_q = xye_filepath_out_q + self.config_filepath = config_filepath + self.beam_energy = beam_energy + self.flatfield_filepath = flatfield_filepath + self.active_modules = active_modules + self.angcal_filepath = angcal_filepath + self.filename_suffix = filename_suffix + self.out_directory = out_directory + self.bad_frames = bad_frames + self.bad_modules = bad_modules + self.beamline_offset = beamline_offset + self.data_reduction_mode = data_reduction_mode + self.apply_flatfield = apply_flatfield + self.live = live + self.execute_reduction = execute_reduction + self.logging = logging + self.filepath = filepath + + if self.bad_frames is None: + self.bad_frames = [] # frames that should be removed, because they are bad + + if self.out_directory is not None: + self.file_dir = ( + self.out_directory + ) # this will replace the directory with the one specified by the user + else: + self.file_dir = os.path.dirname( + self.filepath + ) # this will be something like /dls/i11/data/2025/cm40643-1 + + self.logger = AnalysisLogger( + os.path.join(self.file_dir, "processed", "mythen3_reduction.log") + ) + + if not os.path.exists(self.filepath): + self.logger.log("NXS file does not exist") + quit() + + self.logger.log("######################################\n") + self.logger.log(f"Data reduction being performed on: {self.filepath}") + + self.file_name = os.path.splitext(os.path.basename(self.filepath))[ + 0 + ] # this will be something like 1290222 + self.file_extension = os.path.splitext(self.filepath)[-1] # this will be .nxs + + # Each module is divided into this many pixels. + self.STRIPS_PER_MODULE = 1280 + self.MODULES_PER_DETECTOR = 28 + + if not self.config_filepath: + self.config_filepath = ( + "/dls_sw/i11/software/mythen3/diamond/mythen3_reduction_config.toml" + ) + + self.load_toml_config() + self.set_save_filepaths() + + self.good_modules = set(self.active_modules).difference(set(self.bad_modules)) + + self.logger.log("Modules in output data:", self.good_modules) + + if self.beam_energy: + self.wavelength = I11Reduction.calculate_wavelength(self.beam_energy) + self.logger.log( + f"Beam Energy: {self.beam_energy} (keV) | Wavelength = {self.wavelength:.3f} (Angstrom)\n" # noqa + ) + + # self.bad_channels = self.generate_badchannel_dict() + self.bad_channels = load_int_array_from_file(self.bad_channels_filepath) + + if self.angcal_filepath: + self.logger.log( + f"Using the following angular calibrations file: {angcal_filepath}" + ) + + self.module_angular_cal, self.beamline_offset = ( + I11Reduction.read_singular_angcal_files(self.angcal_filepath) + ) + else: + # self.logger.log("Using the following angular calibrations files") + # self.logger.log(f"{list(self.config["angular_calibrations"].values())}") + self.module_angular_cal, self.beamline_offset = ( + I11Reduction.read_angular_calibration_and_create_cal_dict( + self.config, self.active_modules + ) + ) + + ##################################################################################################################################### + # everything before here is just setting up calibrations, + # and hasn't read the actual dataset + + if self.filepath.lower().endswith(".nxs"): + self.n_frames, self.deltas, self.n_modules_in_data = self.read_nxs_metadata( + self.filepath + ) + else: + self.logger.log("\n\nAborting: Must be a nexus!!\n\n") + quit() + + self.raw_flatfield_counts = self.load_flatfield(self.flatfield_filepath) + self.flatfield_modules = self.split_flatfield() + + self.check_active_modules() + # dict containing angular calibrations for each module + self.module_raw_tth, self.whole_data_raw_tth = self.calculate_modules_tth() + + ############################################################################################################ + + # data reduction happens here differently for each data reduction mode + + if self.execute_reduction: + if ( + (self.data_reduction_mode == 0) + and (self.n_frames > 50) + and ((np.amax(self.deltas) - np.amin(self.deltas)) > 60) + ): + self.logger.log( + "This looks like a flatfield scan...treating it as such" + ) + self.data_reduction_mode = 3 + + if self.data_reduction_mode == 0: + self.data_reduction_mode_standard() + # self.data_reduction_mode_0_fast() + elif self.data_reduction_mode == 1: + self.data_reduction_mode_time_resolved() + elif self.data_reduction_mode == 2: + self.data_reduction_mode_pump_probe() + elif self.data_reduction_mode == 3: + self.data_reduction_mode_flatfield() + else: + self.logger.log( + "Data reduction mode must be one of the specified values" + ) + + if self.live: + self.communicate_with_control(self.send_to_ispyb) + + zeros = ( + self.angular_corrected_data[self.angular_corrected_data["counts"] == 0] + ).sort_values(by="det_channel", ascending=True) + # print("bad channel", zeros) + self.logger.log(f"Possible bad channels: {zeros['det_channel'].unique()}") + ########################################################################## + self.logger.log("###############END###############\n") + + +if __name__ == "__main__": + ################################################## + ################################################## + + parser = argparse.ArgumentParser( + description="Post-processor for mythen3 data; " + "converts an uncalibrated .nxs files " + "written by the detector into a calibrated and corrected .xye ASCII file.", + add_help=True, + ) + + parser.add_argument( + "-d", "--data", help="Path to the nxs data file to reduce", required=True + ) + + parser.add_argument( + "-c", + "--config", + help="Path to .toml config file, containing the bad channels, " + "angular cal files, binning size, etc", + required=False, + ) + + parser.add_argument( + "-o", + "--out-xye-file", + help="Path to write output .xye file (2th, counts, error)", + required=False, + ) + + parser.add_argument( + "-q", + "--out-q-space-file", + help="Path to write output Q .xye file (Q, counts, error)", + required=False, + ) + + parser.add_argument( + "-nxs", + "--out-nxs-file", + help="Path to write output processed .nxs file", + required=False, + ) + + parser.add_argument( + "-ang", + "--ang-cal-file", + help="Path to angular calibration file", + required=False, + ) + + parser.add_argument( + "-drm", + "--data-reduction-mode", + help="How the data should be reduced. 0, 1 or 2 \ + 0 = standard (all data will be reduced into 1 file, possibly multiple angles) \ + 1 = time-resolved mode (many frames per .nxs saved into " + "seperate .xye files for each frame)\ + 2 = pump-probe (all frames will be read and summed together - " + "data has been taken at static angle, optimised for lots of frames)", + required=False, + ) + + parser.add_argument( + "-bf", + "--bad_frames", + help="A list of 'bad frames' that will be removed from the final dataset." + "Specified comma seperated eg. -bf 0,1,2,3 ", + required=False, + type=lambda s: [int(item) for item in s.split(",")], + ) + + parser.add_argument( + "-l", + "--live", + help="Is this a live experiment, and therefore shuold we send messenges to gda?", # noqa + required=False, + ) + + args = parser.parse_args() + + import time + + start = time.time() + Analysis = I11Reduction( + filepath=args.data, + config_filepath=args.config, + xye_filepath_out_q=args.out_q_space_file, + reduced_nxs_filepath_out=args.out_nxs_file, + angcal_filepath=args.ang_cal_file, + live=args.live, + ) + end = time.time() + + Analysis.logger.log(f"Time: {end - start} sec") diff --git a/src/xrpd_toolbox/i11/mythen_pyfai.py b/src/xrpd_toolbox/i11/mythen_pyfai.py new file mode 100644 index 0000000..a3f53fb --- /dev/null +++ b/src/xrpd_toolbox/i11/mythen_pyfai.py @@ -0,0 +1,180 @@ +from pathlib import Path +from typing import Literal + +# import ipywidgets as widgets +import numpy as np +from matplotlib import cm +from matplotlib import pyplot as plt +from matplotlib.colors import LogNorm + +# from pyFAI import goniometer, units +# from pyFAI.azimuthalIntegrator import AzimuthalIntegrator +from pyFAI.calibrant import get_calibrant + +# from pyFAI.containers import Integrate1dResult +# from pyFAI.control_points import ControlPoints +from pyFAI.detectors import Detector +from pyFAI.geometry import Geometry + +# from pyFAI.geometryRefinement import GeometryRefinement +from pyFAI.goniometer import ( + ExtendedTransformation, + SingleGeometry, +) + +# from pyFAI.gui import jupyter +# from pyFAI.units import hc +# from scipy.interpolate import interp1d +# from scipy.optimize import bisect, minimize +from scipy.signal import find_peaks_cwt + +# from scipy.spatial import distance_matrix +# from silx.resources import ExternalResources +from xrpd_toolbox.i11.mythen import MythenDataLoader + + +class Mythen3(Detector): + "Verical Mythen dtrip detector from Dectris" + + aliases = ["Mythen3 1280"] + force_pixel = True + MAX_SHAPE = (1280, 1) + + def __init__(self, pixel1=50e-6, pixel2=8e-3): + super().__init__(pixel1=pixel1, pixel2=pixel2) + + +class AngularCalibrationPyFAI: + def __init__( + self, + filepath: str | Path, + wavelength_in_m: float, + calibrant_name: Literal["Si", "LaB6", "CeO2"], + ): + self.filepath = filepath + self.data_loader = MythenDataLoader(filepath=filepath) + self.data = self.data_loader.module_data + self.calibrant_name = calibrant_name + self.calibrant = get_calibrant(self.calibrant_name) + self.calibrant.wavelength = wavelength_in_m + + self.modules = {} + for name, module_dataset in enumerate(self.data): + detector_module = Mythen3() + mask = module_dataset[0] < 0 + print(name, module_dataset.shape) + # discard the first 20 and last 20 pixels + # as their intensities are less reliable + mask[:20] = True + mask[-20:] = True + detector_module.mask = mask.reshape(-1, 1) + self.modules[name] = detector_module + + ExtendedTransformation( + dist_expr="dist", + poni1_expr="poni1", + poni2_expr="poni2", + rot1_expr="rot1", + rot2_expr="pi*(offset+scale*angle)/180.", + rot3_expr="0.0", + wavelength_expr="wavelength", + param_names=["dist", "poni1", "poni2", "rot1", "offset", "scale", "nrj"], + pos_names=["angle"], + constants={"wavelength": wavelength_in_m}, + ) + + peaks = self.peak_picking(0, 0) + print(peaks) + + step_idx = 1 + # Approximate offset for the module #0 at 0° + print( + f"Approximated offset for the first module at step {step_idx}: ", + self.get_position(step_idx), + ) + + def single_geometry_calibration(self, wavelength_in_m: float): + for name, module_dataset in enumerate(self.data): + detector_module = self.modules[name] + initial = Geometry(detector=detector_module, wavelength=wavelength_in_m) + + plt.title(f"Module {name}") + plt.imshow(module_dataset, cmap=cm.inferno, norm=LogNorm(), origin="lower") # type: ignore + plt.show() + + # peak_indices = get_peaks_from_images(data_img, n_peaks=n_peaks) + + # print(peak_indices) + beam_centre_x = -10 # x-coordinate of the beam-center in pixels + beam_centre_y = 1 # y-coordinate of the beam-center in pixels + distance = 762 # This is the distance in mm (unit used by Fit2d) + rot3 = -0.78539816339 + + initial.setFit2D(distance, beam_centre_x, beam_centre_y) + + single_geometry = SingleGeometry( + "pe2AD", + module_dataset, + calibrant=self.calibrant, + detector=detector_module, + geometry=initial, + ) + single_geometry.geometry_refinement.rot3 = ( + rot3 # https://confluence.diamond.ac.uk/display/I151/Making+a+poni+file + ) + + for rings in [5, 5, 5, 5, 7, 7, 9, 11, 15, 15, 17, 21, 23, 25, 31, 41, 51]: + single_geometry.extract_cp(max_rings=rings) + # Refine the geometry ... here in SAXS geometry, + # the rotation is fixed in orthogonal setup + single_geometry.geometry_refinement.refine2(fix=["wavelength"]) + + def get_data(self, module_id, frame_id: int): + return self.data[module_id][frame_id] + + def get_position(self, idx: int): + "Returns the postion of the goniometer for the given frame_id" + return self.data_loader.positions[idx] + + # Define a peak-picking function based on the dataset-name and the frame_id: + def peak_picking(self, module_name, frame_id, threshold=500): + """Peak-picking base on find_peaks_cwt from scipy plus + second-order tailor exapention refinement for sub-pixel resolution. + + The half-pixel offset is accounted here, i.e pixel #0 has its center at 0.5 + + """ + module = self.modules[module_name] + msk = module.mask.ravel() + + spectrum = self.data[module_name][frame_id] + guess = find_peaks_cwt(spectrum, [20]) + + valid = np.logical_and(np.logical_not(msk[guess]), spectrum[guess] > threshold) + guess = guess[valid] + + # Based on maximum is f'(x) = 0 ~ f'(x0) + (x-x0)*(f''(x0)) + df = np.gradient(spectrum) + d2f = np.gradient(df) + bad = d2f == 0 + d2f[bad] = 1e-10 # prevent devision by zero. Discared later on + cor = df / d2f + cor[abs(cor) > 1] = 0 + cor[bad] = 0 + ref = guess - cor[guess] + 0.5 # half a pixel offset + x = np.zeros_like(ref) + 0.5 # half a pixel offset + return np.vstack((ref, x)).T + + # def update(self, module_id, frame_id): + # spectrum = self.data[module_id][frame_id] + # self.line.set_data(np.arange(spectrum.size), spectrum) + # self.ax.set_title(f"Module {module_id}, Frame {frame_id}") + # self.fig.canvas.draw() + + +if __name__ == "__main__": + filepath = "/host-home/projects/outputs/angular_calibration/1410290.nxs" + wavelength = 0.828783 * 1e-10 # 0.828773 + calibrant_name = "Si" + + AngularCalibrationPyFAI(filepath, wavelength, calibrant_name) diff --git a/src/xrpd_toolbox/i15_1/__init__.py b/src/xrpd_toolbox/i15_1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/xrpd_toolbox/i15_1/eiger_500k.py b/src/xrpd_toolbox/i15_1/eiger_500k.py new file mode 100644 index 0000000..3ada7a5 --- /dev/null +++ b/src/xrpd_toolbox/i15_1/eiger_500k.py @@ -0,0 +1,344 @@ +from collections.abc import Collection +from copy import deepcopy +from functools import cached_property +from pathlib import Path +from typing import Literal + +import matplotlib.pyplot as plt +import numpy as np +import pyFAI +from h5py import Dataset, File +from matplotlib.colors import LogNorm +from pyFAI import units +from pyFAI.calibrant import get_calibrant +from pyFAI.detectors import Detector +from pyFAI.goniometer import MultiGeometry, SingleGeometry +from pyFAI.gui import jupyter +from pyFAI.integrator.azimuthal import AzimuthalIntegrator +from pyFAI.method_registry import IntegrationMethod + +from xrpd_toolbox.core import XRPDBaseModel +from xrpd_toolbox.utils.utils import ( + get_entry, + h5_to_array, +) + +PIXEL_SIZE = 7.5e-5 # in m +INITIAL_DISTNACE = 700 # mm +DEFAULT_MAX_SHAPE = (1024, 512) + + +def calibrate_single_geometry_from_rings( + geometry: SingleGeometry, + rings: Collection[int] = [5, 5, 5, 7, 7, 9, 11, 15, 17], + fix: list | None = None, +): + if fix is None: + fix = [] + + for n_rings in rings: + geometry.extract_cp(max_rings=n_rings) + geometry.geometry_refinement.refine2(fix=fix) + + return geometry + + +class EigerSettings(XRPDBaseModel): + bad_channels_filepath: str | Path = "/dls_sw/i15-1/software/bad_channel_mask.hdf5" + bad_channel_masking: bool = True + flatfield_filepath: str | Path | None = None + apply_flatfield: bool = False + darkfield_filepath: str | Path | None = None + send_to_ispyb: bool = False + rebin_step: float = 0.004 + error_calc: Literal["poisson", "std_dev", "max"] = "poisson" + poni_filepath: str | Path | None = None + + +class EigerDataLoader: + def __init__( + self, + filepath: str | Path, + eiger_data_path: str = "data", + tth_path: str = "tth", + ): + self.filepath = filepath + self.eiger_data_path = eiger_data_path + self.tth_path = tth_path + + self.entry = get_entry(self.filepath) + self.dataset_path = f"/{self.entry}/{self.eiger_data_path}/data" + + @cached_property + def positions(self) -> np.ndarray: + try: + deltas = h5_to_array(self.filepath, self.tth_path) + return deltas + except ValueError as e: + print(f"{e} - {self.tth_path} in data - returning 0") + deltas = np.array([0]) + return deltas + + @cached_property + def count_time_path(self) -> str: + return f"/{self.entry}/instrument/{self.eiger_data_path}/count_time" + + @cached_property + def durations(self) -> np.ndarray: + return h5_to_array(self.filepath, self.count_time_path) + + @property + def data(self): + return self.get_data(self.dataset_path) + + def get_frame(self, frame: int | Collection[int] | slice): + return self.get_data(self.dataset_path) + + def get_data(self, dataset_path) -> np.ndarray: + with File(self.filepath, "r") as file: + if self.dataset_path not in file: + raise ValueError(f"Dataset path {dataset_path} not found in HDF5 file.") + + data = file.get(dataset_path) + + if (data is not None) and isinstance(data, Dataset): + if data.ndim < 1: + raise ValueError("Data has insufficient dimensions.") + module_frame_data = data[...] + + return np.asarray(module_frame_data) + else: + raise ValueError(f"Data at {dataset_path} in {self.filepath}is None.") + + +class Eiger500K(Detector): + IS_FLAT = False # this detector is flat + IS_CONTIGUOUS = True + + def __init__( + self, + filepath: str | Path | None = None, + settings: EigerSettings | None = None, + poni: str | Path | dict | None = None, + wavelength: float | None = None, # in Angstrom + ): + self.filepath = filepath + self.settings = settings + self.poni = poni + self.calibrant = None + self.wavelength = wavelength + + if self.filepath is not None: + self.data_loader = EigerDataLoader(self.filepath) + self.max_shape = self.data_loader.data.shape + else: + self.max_shape = DEFAULT_MAX_SHAPE # Default shape if no data + + super().__init__(pixel1=PIXEL_SIZE, pixel2=PIXEL_SIZE, max_shape=self.max_shape) + + if isinstance(self.poni, (str, Path)): + self.ai = pyFAI.load(str(self.poni)) + elif isinstance(self.poni, dict): + self.ai = AzimuthalIntegrator(detector=self, **self.poni) + elif self.settings is not None: + self.ai = pyFAI.load(str(self.settings.poni_filepath)) + else: + self.ai = None + + if self.ai is not None and ( + self.ai.pixel1 != PIXEL_SIZE or self.ai.pixel2 != PIXEL_SIZE + ): + raise ValueError( + f"Pixel size in poni file ({self.ai.pixel1}, {self.ai.pixel2}) does not match expected pixel size ({PIXEL_SIZE})." # noqa + ) + + def process_step_scan(self): + for _position in self.data_loader.positions: + # do geometry transformation + + pass + + def load_geometry(self, poni_files: str | list[str | Path]): + # if isinstance(poni_files, list) and (len(poni_files) > 1): + # mg = MultiGeometry() + + # else: + # self.ai = pyFAI.load(str(poni_files)) + pass + + def set_calibrant(self, calibrant_name: str, wavelength_in_ang: float): + self.calibrant = get_calibrant(calibrant_name) + self.calibrant.wavelength = wavelength_in_ang / 1e10 + + return self.calibrant + + def test(self): + poni1 = 0.06144 + poni2 = 0.06144 + wavelength = 1e-10 + + lab6 = get_calibrant("LaB6") + lab6.wavelength = wavelength + + ai = pyFAI.load( + { + "dist": 0.1, + "poni1": poni1, + "poni2": poni2, + "detector": self, + "wavelength": wavelength, + } + ) + + method = IntegrationMethod.parse("full", dim=1) + img = lab6.fake_calibration_image(ai) + + plt.imshow(img) + plt.show() + + step = 15 * np.pi / 180 + ais = [] + imgs = [] + fig, ax = plt.subplots(1, 5, figsize=(20, 4)) + for i in range(5): + my_ai = deepcopy(ai) + my_ai.rot2 -= i * step + my_img = lab6.fake_calibration_image(my_ai) + jupyter.display( + my_img, + label=f"Angle rot2: {np.degrees(my_ai.rot2)}", + ax=ax[i], + ) + ais.append(my_ai) + imgs.append(my_img) + print(my_ai) + + mg = MultiGeometry(ais, unit="2th_deg", radial_range=(0, 90)) + print(mg) + fig, ax = plt.subplots(2, 1, figsize=(12, 16)) + jupyter.plot1d(mg.integrate1d(imgs, 10000, method=method), ax=ax[0]) + plt.show() + + def integrate_images( + self, images: Collection[np.ndarray], ais: Collection[AzimuthalIntegrator] + ): + method = IntegrationMethod.parse("full", dim=1) + mg = MultiGeometry(ais, unit=units.TTH_DEG) + x_data, y_data = mg.integrate1d(images, npt=10000, method=method) + + return x_data, y_data + + def simulate_data( + self, + positions_in_tth: Collection[float], + calibrant_name: str, + wavelength_in_ang: float, + resolution: float = 0.03, + ) -> tuple[list[np.ndarray], list[AzimuthalIntegrator]]: + simulated_data = [] + simulated_ais = [] + + if self.calibrant is None: + self.calibrant = self.set_calibrant(calibrant_name, wavelength_in_ang) + if self.ai is None: + raise AttributeError("No Azimuthal Integrator set") + + positions_rad = np.deg2rad(np.asarray(positions_in_tth, dtype=float)) + + for position in positions_rad: + ai_copy = deepcopy(self.ai) + ai_copy.rot2 = position + + simulated_image = self.calibrant.fake_calibration_image( + ai_copy, shape=self.max_shape, resolution=resolution + ) + + simulated_ais.append(ai_copy) + simulated_data.append(simulated_image) + + return simulated_data, simulated_ais + + def simulate_1d_pattern( + self, + positions_in_tth: Collection[float], + calibrant_name: str, + wavelength_in_ang: float, + ): + simulated_step_scan, simulated_ais = self.simulate_data( + positions_in_tth=positions_in_tth, + calibrant_name=calibrant_name, + wavelength_in_ang=wavelength_in_ang, + ) + + simulated_x_data, simulated_y_data = self.integrate_images( + simulated_step_scan, simulated_ais + ) + + return simulated_x_data, simulated_y_data + + def calibrate_single_geometry( + self, + calibrant_name: str, + wavelength: float, + poni_output_filepath: str | Path, + wavelength_unit: Literal["Ang", "A", "Angstrom", "kev", "keV", "ev"], + ): + """Using pyfai and the current data file, + this will attempt to calibrate the detector + using a known calibrant and then output a poni file to disk""" + + if wavelength_unit.lower() in ["ang", "ansgtrom", "a"]: + wavelength_in_ang = wavelength + elif wavelength_unit.lower() in ["ang", "ansgtrom", "a"]: + wavelength_in_ang = wavelength + else: + raise ValueError("wavelength_unit must be valid!") + + calibrant = get_calibrant(calibrant_name) + calibrant.wavelength = wavelength_in_ang / 1e10 + + single_geometry = SingleGeometry( + self.name, self.data_loader.data, calibrant=calibrant, detector=self + ) + + single_geometry = calibrate_single_geometry_from_rings(geometry=single_geometry) + single_geometry.geometry_refinement.save(str(poni_output_filepath)) + + +if __name__ == "__main__": + # SETTINGS = EigerSettings() + # FILEPATH = "/workspaces/XRPD-Toolbox/examples/i15-1/eiger_500k/1414223.nxs" + # eiger = Eiger500K(filepath=FILEPATH, settings=SETTINGS) + calibrant = get_calibrant(calibrant_name="Si") + calibrant.wavelength = 0.161699 / 1e10 + + pixel1 = PIXEL_SIZE + pixel2 = PIXEL_SIZE + + shape = (1024, 512) + + poni1 = pixel1 * shape[0] / 2 + poni2 = pixel2 * shape[1] / 2 + + import pyFAI.detectors + + ai = AzimuthalIntegrator( + detector=pyFAI.detectors.Detector( + pixel1=pixel1, pixel2=pixel2, max_shape=shape + ), + wavelength=calibrant.wavelength, + dist=0.7, + poni1=poni1, + poni2=poni2, + rot1=0, + rot2=0.1, + rot3=0, + ) + + calibration_image = calibrant.fake_calibration_image( + ai, shape=shape, resolution=0.01 + ) + + plt.imshow(calibration_image, norm=LogNorm()) + plt.colorbar() + plt.show() diff --git a/src/xrpd_toolbox/i15_1/pe2ad.py b/src/xrpd_toolbox/i15_1/pe2ad.py new file mode 100644 index 0000000..ae278e2 --- /dev/null +++ b/src/xrpd_toolbox/i15_1/pe2ad.py @@ -0,0 +1,111 @@ +import matplotlib.pyplot as plt +import numpy as np + +from xrpd_toolbox.data_loader import BaseDataLoader +from xrpd_toolbox.fit_engine.peaks import fit_peaks, smooth_tophat + + +class PE2AD(BaseDataLoader): + def __init__(self, filepath, data_path: str = "pe2AD"): + super().__init__(filepath, data_path) + + self.entries = self.get_entries() + + def find_centre1(self, x: np.ndarray): + positions = np.arange(len(x)) + center = np.sum(positions * x) / np.sum(x) + + return center + + def find_center2(self, x): + threshold = np.percentile(x, 99) + sample = x[x < threshold] + densest_idx = np.argmax(sample) + + return int(densest_idx) + + def find_sample_centre(self): + summed_images = self.sum_frames() + centre_index = self.find_center2(summed_images) + + # x = np.arange(len(summed_images)) + + indices = np.arange( + int(centre_index) - 30, int(centre_index) + 31, 1, dtype=int + ) + + print(indices) + + trimmed_sample_density = summed_images[indices] + + s = 3 + + trimmed_sample_density = np.convolve(trimmed_sample_density, np.ones(s) / s) + + trimmed_sample_density = trimmed_sample_density[s - 1 : :] + + peaks = fit_peaks( + x=indices, y=trimmed_sample_density, initial_x_pos=[centre_index] + ) + + # p0 = [x_guess, amp_guess, width_guess] + # popt, _ = curve_fit(gaussian, x_fit, y_fit, p0=p0, maxfev=10000) + + for peak in peaks: + print(peak) + plt.plot(indices, peak.calculate(indices)) + + tophat = smooth_tophat( + indices, + float(peak.amplitude), + float(peak.amplitude), + float(peak.amplitude), + 0.1, + ) + + plt.plot(indices, tophat) + + plt.plot(indices, trimmed_sample_density) + plt.show() + + +if __name__ == "__main__": + import os + + folder = "/dls/i15-1/data/2026/cm44163-1/" + file = "i15-1-95016.nxs" + + prefix = "i15-1-" + + sample_alignment_scans = { + "carbon_black": 94519, + "water": 94520, + "GaIn": 94521, + "NIST_Si": 95016, + "NaCl": 95017, + "HKUST1": 95018, + } + + for sample, number in sample_alignment_scans.items(): + filepath = folder + prefix + str(number) + ".nxs" + + output_file = f"/workspaces/outputs/i15-1/{sample}-{number}.csv" + + print(filepath) + + if not os.path.exists(filepath): + print("it doesn't exist") + + pe2ad = PE2AD(filepath) + summed_images = pe2ad.sum_frames() + + index = np.linspace(0, len(summed_images), len(summed_images)) + + csv_data = np.stack((index, summed_images), axis=-1) + + np.savetxt(output_file, csv_data) + + x, y = np.genfromtxt(output_file, unpack=True) + + plt.plot(x, y) + plt.show() diff --git a/src/xrpd_toolbox/i15_1/sample_alignment.py b/src/xrpd_toolbox/i15_1/sample_alignment.py new file mode 100644 index 0000000..aec2bca --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment.py @@ -0,0 +1,376 @@ +"""Sample alignment utilities for the XRPD Toolbox. + +This module provides a SampleAligner model for I15-1 XRPD data, +including peak detection, peak profile construction, and plotting. +""" + +import math +import os +from pathlib import Path + +import numpy as np +from scipy.signal import find_peaks + +from xrpd_toolbox.core import Parameter, XYEData +from xrpd_toolbox.data_loader import BaseDataLoader +from xrpd_toolbox.fit_engine.background import ( + BackgroundType, + ConstantBackground, +) +from xrpd_toolbox.fit_engine.fitting_core import Model, RefinementBaseModel +from xrpd_toolbox.fit_engine.peaks import ( + Peak, + PeakType, + calculate_profile, + peak_factory, +) +from xrpd_toolbox.plotting import FittedDataPlot +from xrpd_toolbox.utils.messenger import Messenger +from xrpd_toolbox.utils.utils import cluster_points_auto + + +class SampleCenteringResult(RefinementBaseModel): + """This is what contains the results and can + be serisalised and sent back to the bluesky plan""" + + centre: float + peaks: list[Peak] + scores: list[float] + + +class SampleAligner(Model[XYEData]): + """Model for aligning XRPD sample patterns using initial peak detection. + + The SampleAligner detects peaks from observed XYEData, groups them, + constructs initial peak models, and evaluates the resulting profile + together with an estimated background. + """ + + background: BackgroundType + sample_and_capillary: list[PeakType] = [] + centre: float | None = None + + def get_peak_info(self, labels, peak_position, peak_intensity): + """Summarize grouped peak detections into peak initialization data. + + Parameters + ---------- + labels: + Cluster labels for each detected peak. + peak_position: + X positions of the detected peaks. + peak_intensity: + Intensities of the detected peaks. + + Returns + ------- + list[dict] + A list of peak summaries containing group id, centre, + amplitude, and FWHM estimates. + """ + grouped_peaks = [] + + group_numbers = np.unique(labels) + + for group in group_numbers: + index = np.where(labels == group)[0] + + group_positions = peak_position[index] + + average_peak_position = np.median(group_positions) + average_peak_intensity = np.median(peak_intensity[index]) + + average_peak_spread = np.ptp(group_positions) + + if average_peak_spread == 0: + average_peak_spread = np.ptp(self.data.x) / 20 + + peak = { + "group": int(group), + "centre": float(average_peak_position), + "amplitude": float(average_peak_intensity), + "fwhm": float(average_peak_spread), + } + + grouped_peaks.append(peak) + + return grouped_peaks + + def calculate_profile(self): + """Calculate the combined peak profile plus background for the model. + + Returns + ------- + numpy.ndarray + The combined intensity profile evaluated at the current x positions. + """ + return calculate_profile( + self.data.x, self.sample_and_capillary + ) + self.background.calculate(self.data.x) + + def get_initial_peaks(self, peak_type: str = "tophat", smoothing: int = 5): + """Detect observed peaks and build initial peak models for fitting. + + Parameters + ---------- + peak_type: + The type of peak model to create for each detected peak. + smoothing: + Smoothing parameter for peak detection. Currently accepted for + API compatibility but not applied in the current implementation. + """ + peak_indexes = find_peaks(self.data.y)[0] + + peak_position = self.data.x[peak_indexes] + peak_intensity = self.data.y[peak_indexes] + + labels, n_groups = cluster_points_auto(peak_position, peak_intensity) + + peaks = self.get_peak_info(labels, peak_position, peak_intensity) + + for peak in peaks: + if math.isclose(peak["amplitude"], self.data.y.min(), rel_tol=0.1) or ( + peak["amplitude"] < 0 + ): + continue + else: + peak_cls = peak_factory(peak_type) + + sample_peak = peak_cls.model_validate(peak) + sample_peak.parameterise_all(refine=True) + sample_peak.normalised = False + assert isinstance(sample_peak.centre, Parameter) + sample_peak.centre.bounds = [ + self.data.x.min(), + self.data.x.max(), + ] + # assert isinstance(sample_peak.fwhm, Parameter) + # sample_peak.fwhm.bounds = [ + # 0, + # float(np.ptp(self.data.x)), + # ] + self.sample_and_capillary.append(sample_peak) + + # plt.plot(self.data.x, self.calculate_profile()) + # plt.plot(self.data.x, self.data.y) + # plt.scatter(peak_position, peak_intensity) + # plt.show() + + # print(self.sample_and_capillary) + # plt.scatter(peak_position, peak_intensity) + # plt.plot(self.data.x, self.data.y) + # plt.show() + + def get_plot_data(self): + """Plot the observed data, calculated profile, background, and residual. + + The plot shows the observed intensities, the current fitted profile, + the background model, and the residual (observed minus calculated). + """ + if self.data.source is not None: + title = os.path.basename(self.data.source) + else: + title = None + + profile = calculate_profile(self.data.x, self.sample_and_capillary) + profile = profile + self.background.calculate(self.data.x) + + plot_data = FittedDataPlot( + data=self.data, + calc=profile, + diff=self.data.y - profile, + background=self.background.calculate(self.data.x), + title=title, + markers=np.array([self.centre]), + ) + + return plot_data + + def peaks_to_arrays( + self, peaks: list[PeakType] + ) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """Convert a list of peaks into numpy arrays of centre, amplitude, and FWHM. + + Parameters + ---------- + peaks: + A list of peak model objects. + + Returns + ------- + tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray] + Arrays containing peak centres, amplitudes, and FWHMs. + """ + centres = [ + p.centre.value if isinstance(p.centre, Parameter) else p.centre + for p in peaks + ] + amplitudes = [ + p.amplitude.value if isinstance(p.amplitude, Parameter) else p.amplitude + for p in peaks + ] + fwhms = [ + p.fwhm.value if isinstance(p.fwhm, Parameter) else p.fwhm for p in peaks + ] + return np.array(centres), np.array(amplitudes), np.array(fwhms) + + def middle_elements(self, lst: list): + """Return the central element(s) from a list. + + If the list length is odd, returns the middle three elements. If even, + returns the two elements at the center of the list. + """ + n = len(lst) + mid = n // 2 + + if n % 2 == 0: + return lst[mid - 1 : mid + 1] # 2 elements + else: + return lst[mid - 1 : mid + 2] # 3 elements + + def get_middle_peaks(self): + """Return the central peaks from the current sample and capillary list. + + This is useful for selecting the most representative peaks from the + middle of the detector pattern. + """ + middle_peaks = self.middle_elements(self.sample_and_capillary) + + return middle_peaks + + def get_sample_centre(self) -> SampleCenteringResult: + middle_peaks = self.get_middle_peaks() + centres, amplitudes, fwhms = self.peaks_to_arrays(middle_peaks) + + scores = fwhms * amplitudes + max_index = np.argmax(scores) + + sample_centre = centres[max_index] + + self.centre = sample_centre + + return SampleCenteringResult( + centre=sample_centre, peaks=middle_peaks, scores=scores.tolist() + ) + + # def get_best_peaks(self): + # middle_peaks = self.get_middle_peaks() + # centres, amplitudes, fwhms = self.peaks_to_arrays(self.sample_and_capillary) + + # scores = fwhms * amplitudes + # sort_index = np.argsort(scores) + + # centre_distance = np.abs(centres - np.mean(centres)) + # centre_distance[centre_distance == 0] = 1e-12 + + # centre_scores = normalise(np.log10(centre_distance)) + + # for cen, amp, fw, cs, score in zip( + # centres, amplitudes, fwhms, centre_scores, scores, strict=True + # ): + # print(cen, amp, fw, cs, score) + + +def sample_alignment_model_builder( + data: XYEData | str, peak_type: str = "gaussian" +) -> SampleAligner: + """Construct a SampleAligner from XYE data or a CSV file path, and a peak type + A sample aligner is what is used to align an abtract data set (usually a sample) + + Parameters + ---------- + data: + XYEData instance or a path to a CSV file containing x, y, and e data. + peak_type: + The peak model type to use when generating initial peaks. + + Returns + ------- + SampleAligner + A model with estimated background and initial peak definitions. + """ + if isinstance(data, str): + data = XYEData.from_csv(data) + + background = ConstantBackground.estimate(data.x, data.y) + sample_alignment_model = SampleAligner(data=data, background=background) + sample_alignment_model.get_initial_peaks(peak_type=peak_type) + + return sample_alignment_model + + +def run_sample_alignment(data: XYEData | str) -> SampleAligner: + gauss_model = sample_alignment_model_builder(data, "gaussian") + _, gauss_model, gauss_result = gauss_model.refine() + + tophat_model = sample_alignment_model_builder(data, "tophat") + _, tophat_model, tophat_result = tophat_model.refine() + + if gauss_result.cost < tophat_result.cost: + print("gaussian wins") + best_model = gauss_model + else: + print("top hat wins") + best_model = tophat_model + + # sample_centre = best_model.get_best_peaks() + best_model.get_sample_centre() + + # SampleCenteringResult(centre=sample_centre, peaks=) + + return best_model + + +def sample_alignment( + filepath: str | Path, dataset_path: str, beamline: str | None = None +): + if (beamline is not None) and (not beamline.startswith("i")): + print(f"{beamline} must start with i, eg i15-1, or i11") + + data = BaseDataLoader(filepath=filepath, data_path=dataset_path) + summed_frames = data.sum_frames() + index = np.linspace(0, len(summed_frames), len(summed_frames)) + + xyedata = XYEData(x=index, y=summed_frames) + best_model = run_sample_alignment(data=xyedata) + + sample_centre_result = best_model.get_sample_centre() + sample_centre_result.deparameterise_all() + + plot_data = best_model.get_plot_data() + + if beamline is not None: + plot_data.publish(beamline=beamline) + + return sample_centre_result + + +if __name__ == "__main__": + BEAMLINE = "i15-1" + + folder = "/workspaces/XRPD-Toolbox/src/xrpd_toolbox/i15_1/sample_alignment_data" + + sample_alignment_files = [os.path.join(folder, f) for f in os.listdir(folder)] + + listener = Messenger("i15-1", destinations=["/topic/public.data.plot"]) + + for filepath in sample_alignment_files: + best_model = run_sample_alignment(data=filepath) + + sample_centre_result = best_model.get_sample_centre() + # _ = best_model.get_best_peaks() + + sample_centre_result.deparameterise_all() + + print(sample_centre_result.model_dump_json()) + + plot_data = best_model.get_plot_data() + plot_data.plot() + + # plot_data.publish(BEAMLINE) + + # messenger.send_plot_data(plot_data) + # listener.listen(max_iter=5) + # listener.stop() + + print("-----") diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/GaIn-94521.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/GaIn-94521.csv new file mode 100644 index 0000000..fa1956e --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/GaIn-94521.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 -4.942632500000000000e+05 +1.008333333333333304e+00 -2.682030000000000000e+05 +2.016666666666666607e+00 -9.406111250000000000e+05 +3.024999999999999911e+00 -5.795606250000000000e+05 +4.033333333333333215e+00 1.029351000000000000e+06 +5.041666666666666075e+00 -8.120321250000000000e+05 +6.049999999999999822e+00 -1.611372750000000000e+06 +7.058333333333333570e+00 -1.159415625000000000e+06 +8.066666666666666430e+00 -4.752855000000000000e+05 +9.074999999999999289e+00 -1.044992625000000000e+06 +1.008333333333333215e+01 -1.096205625000000000e+06 +1.109166666666666679e+01 -1.812264625000000000e+06 +1.209999999999999964e+01 -6.532726250000000000e+05 +1.310833333333333250e+01 -2.199323000000000000e+06 +1.411666666666666714e+01 -1.836659125000000000e+06 +1.512500000000000000e+01 -1.416606125000000000e+06 +1.613333333333333286e+01 -4.033614500000000000e+06 +1.714166666666666572e+01 -1.308484125000000000e+06 +1.814999999999999858e+01 -3.033754500000000000e+06 +1.915833333333333144e+01 -4.853658000000000000e+06 +2.016666666666666430e+01 -1.641913625000000000e+06 +2.117500000000000071e+01 -2.823653500000000000e+06 +2.218333333333333357e+01 -2.504555500000000000e+06 +2.319166666666666643e+01 -6.514760000000000000e+05 +2.419999999999999929e+01 -1.861670625000000000e+06 +2.520833333333333215e+01 -2.473223500000000000e+06 +2.621666666666666501e+01 -3.984078500000000000e+06 +2.722499999999999787e+01 -1.503500125000000000e+06 +2.823333333333333428e+01 -2.957918000000000000e+06 +2.924166666666666714e+01 -1.089009500000000000e+06 +3.025000000000000000e+01 1.397393400000000000e+07 +3.125833333333333286e+01 4.656908800000000000e+07 +3.226666666666666572e+01 1.132956880000000000e+08 +3.327499999999999858e+01 1.985058080000000000e+08 +3.428333333333333144e+01 2.473709440000000000e+08 +3.529166666666666430e+01 2.560948800000000000e+08 +3.629999999999999716e+01 2.586607360000000000e+08 +3.730833333333333002e+01 2.623426400000000000e+08 +3.831666666666666288e+01 2.629969440000000000e+08 +3.932499999999999574e+01 2.629731200000000000e+08 +4.033333333333332860e+01 2.637951680000000000e+08 +4.134166666666666856e+01 2.639682400000000000e+08 +4.235000000000000142e+01 2.633032640000000000e+08 +4.335833333333333428e+01 2.626618880000000000e+08 +4.436666666666666714e+01 2.626556480000000000e+08 +4.537500000000000000e+01 2.626733440000000000e+08 +4.638333333333333286e+01 2.625541600000000000e+08 +4.739166666666666572e+01 2.640034720000000000e+08 +4.839999999999999858e+01 2.627830720000000000e+08 +4.940833333333333144e+01 2.616420960000000000e+08 +5.041666666666666430e+01 2.642833280000000000e+08 +5.142499999999999716e+01 2.625634400000000000e+08 +5.243333333333333002e+01 2.633835680000000000e+08 +5.344166666666666288e+01 2.629843840000000000e+08 +5.444999999999999574e+01 2.617662080000000000e+08 +5.545833333333332860e+01 2.636600480000000000e+08 +5.646666666666666856e+01 2.616656320000000000e+08 +5.747500000000000142e+01 2.619733760000000000e+08 +5.848333333333333428e+01 2.627042720000000000e+08 +5.949166666666666714e+01 2.624980320000000000e+08 +6.050000000000000000e+01 2.635790400000000000e+08 +6.150833333333333286e+01 2.643184160000000000e+08 +6.251666666666666572e+01 2.634902560000000000e+08 +6.352499999999999858e+01 2.636081760000000000e+08 +6.453333333333333144e+01 2.626369440000000000e+08 +6.554166666666667140e+01 2.642100640000000000e+08 +6.654999999999999716e+01 2.640754720000000000e+08 +6.755833333333333712e+01 2.632022400000000000e+08 +6.856666666666666288e+01 2.639891200000000000e+08 +6.957500000000000284e+01 2.627248640000000000e+08 +7.058333333333332860e+01 2.622544480000000000e+08 +7.159166666666666856e+01 2.622233760000000000e+08 +7.259999999999999432e+01 2.646480640000000000e+08 +7.360833333333333428e+01 2.629961920000000000e+08 +7.461666666666666003e+01 2.645904960000000000e+08 +7.562500000000000000e+01 2.623220800000000000e+08 +7.663333333333332575e+01 2.638705600000000000e+08 +7.764166666666666572e+01 2.634112800000000000e+08 +7.864999999999999147e+01 2.619528960000000000e+08 +7.965833333333333144e+01 2.647644160000000000e+08 +8.066666666666665719e+01 2.645945760000000000e+08 +8.167499999999999716e+01 2.636450400000000000e+08 +8.268333333333333712e+01 2.627555200000000000e+08 +8.369166666666666288e+01 2.645808960000000000e+08 +8.470000000000000284e+01 2.630552000000000000e+08 +8.570833333333332860e+01 2.663572160000000000e+08 +8.671666666666666856e+01 2.675390560000000000e+08 +8.772499999999999432e+01 2.691481600000000000e+08 +8.873333333333333428e+01 2.689531200000000000e+08 +8.974166666666666003e+01 2.690643840000000000e+08 +9.075000000000000000e+01 2.684619840000000000e+08 +9.175833333333332575e+01 2.684525120000000000e+08 +9.276666666666666572e+01 2.699386560000000000e+08 +9.377499999999999147e+01 2.684809600000000000e+08 +9.478333333333333144e+01 2.680434240000000000e+08 +9.579166666666665719e+01 2.683393440000000000e+08 +9.679999999999999716e+01 2.671742240000000000e+08 +9.780833333333333712e+01 2.679014560000000000e+08 +9.881666666666666288e+01 2.683104000000000000e+08 +9.982500000000000284e+01 2.697334720000000000e+08 +1.008333333333333286e+02 2.705280640000000000e+08 +1.018416666666666686e+02 2.703045120000000000e+08 +1.028499999999999943e+02 2.694526400000000000e+08 +1.038583333333333343e+02 2.694515200000000000e+08 +1.048666666666666600e+02 2.692971840000000000e+08 +1.058750000000000000e+02 2.654848320000000000e+08 +1.068833333333333258e+02 2.234591680000000000e+08 +1.078916666666666657e+02 1.336448960000000000e+08 +1.088999999999999915e+02 6.488301600000000000e+07 +1.099083333333333314e+02 5.173446400000000000e+07 +1.109166666666666572e+02 5.597864000000000000e+07 +1.119249999999999972e+02 5.737546400000000000e+07 +1.129333333333333371e+02 5.261663200000000000e+07 +1.139416666666666629e+02 5.312282400000000000e+07 +1.149500000000000028e+02 5.529982000000000000e+07 +1.159583333333333286e+02 5.261446400000000000e+07 +1.169666666666666686e+02 4.004167600000000000e+07 +1.179749999999999943e+02 3.187776000000000000e+07 +1.189833333333333343e+02 3.305045400000000000e+07 +1.199916666666666600e+02 3.191910000000000000e+07 +1.210000000000000000e+02 3.062903000000000000e+07 diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/HKUST1-95018.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/HKUST1-95018.csv new file mode 100644 index 0000000..6858d6f --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/HKUST1-95018.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 3.130599800000000000e+07 +1.008333333333333304e+00 3.093492400000000000e+07 +2.016666666666666607e+00 3.002946400000000000e+07 +3.024999999999999911e+00 3.031497000000000000e+07 +4.033333333333333215e+00 3.037097800000000000e+07 +5.041666666666666075e+00 2.958688000000000000e+07 +6.049999999999999822e+00 2.999681600000000000e+07 +7.058333333333333570e+00 2.995722600000000000e+07 +8.066666666666666430e+00 2.990089600000000000e+07 +9.074999999999999289e+00 2.962231200000000000e+07 +1.008333333333333215e+01 2.958536000000000000e+07 +1.109166666666666679e+01 2.972692600000000000e+07 +1.209999999999999964e+01 3.092850800000000000e+07 +1.310833333333333250e+01 2.918844600000000000e+07 +1.411666666666666714e+01 3.051542800000000000e+07 +1.512500000000000000e+01 2.968539600000000000e+07 +1.613333333333333286e+01 3.087203200000000000e+07 +1.714166666666666572e+01 3.116345400000000000e+07 +1.814999999999999858e+01 3.111531200000000000e+07 +1.915833333333333144e+01 3.056914800000000000e+07 +2.016666666666666430e+01 3.210825000000000000e+07 +2.117500000000000071e+01 3.256551200000000000e+07 +2.218333333333333357e+01 3.038399600000000000e+07 +2.319166666666666643e+01 3.191833200000000000e+07 +2.419999999999999929e+01 3.166461000000000000e+07 +2.520833333333333215e+01 3.052523200000000000e+07 +2.621666666666666501e+01 3.144023400000000000e+07 +2.722499999999999787e+01 3.162286200000000000e+07 +2.823333333333333428e+01 3.110690400000000000e+07 +2.924166666666666714e+01 3.118338200000000000e+07 +3.025000000000000000e+01 3.154022000000000000e+07 +3.125833333333333286e+01 3.087176600000000000e+07 +3.226666666666666572e+01 2.982390000000000000e+07 +3.327499999999999858e+01 3.055512800000000000e+07 +3.428333333333333144e+01 3.103538800000000000e+07 +3.529166666666666430e+01 2.899421400000000000e+07 +3.629999999999999716e+01 3.055985600000000000e+07 +3.730833333333333002e+01 2.906779800000000000e+07 +3.831666666666666288e+01 3.005662800000000000e+07 +3.932499999999999574e+01 3.421096800000000000e+07 +4.033333333333332860e+01 5.134942400000000000e+07 +4.134166666666666856e+01 8.194876800000000000e+07 +4.235000000000000142e+01 9.648438400000000000e+07 +4.335833333333333428e+01 8.772667200000000000e+07 +4.436666666666666714e+01 7.765228800000000000e+07 +4.537500000000000000e+01 7.401430400000000000e+07 +4.638333333333333286e+01 7.518102400000000000e+07 +4.739166666666666572e+01 7.406272800000000000e+07 +4.839999999999999858e+01 7.254305600000000000e+07 +4.940833333333333144e+01 7.408316800000000000e+07 +5.041666666666666430e+01 7.080732000000000000e+07 +5.142499999999999716e+01 6.812671200000000000e+07 +5.243333333333333002e+01 6.573288800000000000e+07 +5.344166666666666288e+01 6.368700800000000000e+07 +5.444999999999999574e+01 6.375175600000000000e+07 +5.545833333333332860e+01 6.524612400000000000e+07 +5.646666666666666856e+01 6.847843200000000000e+07 +5.747500000000000142e+01 7.063230400000000000e+07 +5.848333333333333428e+01 7.241953600000000000e+07 +5.949166666666666714e+01 6.865308800000000000e+07 +6.050000000000000000e+01 6.060246800000000000e+07 +6.150833333333333286e+01 5.881985600000000000e+07 +6.251666666666666572e+01 5.868864800000000000e+07 +6.352499999999999858e+01 5.969702800000000000e+07 +6.453333333333333144e+01 6.032499600000000000e+07 +6.554166666666667140e+01 5.924179600000000000e+07 +6.654999999999999716e+01 6.009128800000000000e+07 +6.755833333333333712e+01 6.133314800000000000e+07 +6.856666666666666288e+01 6.098732800000000000e+07 +6.957500000000000284e+01 6.383683200000000000e+07 +7.058333333333332860e+01 6.377981600000000000e+07 +7.159166666666666856e+01 6.276036800000000000e+07 +7.259999999999999432e+01 6.481506400000000000e+07 +7.360833333333333428e+01 6.438474800000000000e+07 +7.461666666666666003e+01 6.702049600000000000e+07 +7.562500000000000000e+01 6.252268000000000000e+07 +7.663333333333332575e+01 5.890271200000000000e+07 +7.764166666666666572e+01 5.811528000000000000e+07 +7.864999999999999147e+01 5.824042400000000000e+07 +7.965833333333333144e+01 5.745035600000000000e+07 +8.066666666666665719e+01 5.907456800000000000e+07 +8.167499999999999716e+01 5.867616800000000000e+07 +8.268333333333333712e+01 5.794715200000000000e+07 +8.369166666666666288e+01 6.164179200000000000e+07 +8.470000000000000284e+01 6.315317600000000000e+07 +8.570833333333332860e+01 6.694786400000000000e+07 +8.671666666666666856e+01 6.490659200000000000e+07 +8.772499999999999432e+01 6.002080800000000000e+07 +8.873333333333333428e+01 5.942921200000000000e+07 +8.974166666666666003e+01 5.942940000000000000e+07 +9.075000000000000000e+01 5.821060800000000000e+07 +9.175833333333332575e+01 5.807120000000000000e+07 +9.276666666666666572e+01 5.756773600000000000e+07 +9.377499999999999147e+01 5.847058400000000000e+07 +9.478333333333333144e+01 6.453256800000000000e+07 +9.579166666666665719e+01 6.031956800000000000e+07 +9.679999999999999716e+01 5.942517200000000000e+07 +9.780833333333333712e+01 5.754168400000000000e+07 +9.881666666666666288e+01 6.280173200000000000e+07 +9.982500000000000284e+01 5.596982400000000000e+07 +1.008333333333333286e+02 5.456378400000000000e+07 +1.018416666666666686e+02 5.661342000000000000e+07 +1.028499999999999943e+02 5.548591200000000000e+07 +1.038583333333333343e+02 5.662965600000000000e+07 +1.048666666666666600e+02 5.655254400000000000e+07 +1.058750000000000000e+02 5.708367200000000000e+07 +1.068833333333333258e+02 5.601358400000000000e+07 +1.078916666666666657e+02 5.657220000000000000e+07 +1.088999999999999915e+02 5.455332800000000000e+07 +1.099083333333333314e+02 5.562106400000000000e+07 +1.109166666666666572e+02 5.471967600000000000e+07 +1.119249999999999972e+02 5.561060000000000000e+07 +1.129333333333333371e+02 5.551432800000000000e+07 +1.139416666666666629e+02 5.425797600000000000e+07 +1.149500000000000028e+02 5.468420000000000000e+07 +1.159583333333333286e+02 5.618793600000000000e+07 +1.169666666666666686e+02 5.743634400000000000e+07 +1.179749999999999943e+02 5.580818400000000000e+07 +1.189833333333333343e+02 5.689840800000000000e+07 +1.199916666666666600e+02 5.631702000000000000e+07 +1.210000000000000000e+02 5.702631600000000000e+07 diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/NIST_Si-95016.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/NIST_Si-95016.csv new file mode 100644 index 0000000..be50b84 --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/NIST_Si-95016.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 4.592435600000000000e+07 +1.008333333333333304e+00 4.589576800000000000e+07 +2.016666666666666607e+00 4.489067200000000000e+07 +3.024999999999999911e+00 4.505381600000000000e+07 +4.033333333333333215e+00 4.407009600000000000e+07 +5.041666666666666075e+00 4.426360000000000000e+07 +6.049999999999999822e+00 4.396980000000000000e+07 +7.058333333333333570e+00 4.373070400000000000e+07 +8.066666666666666430e+00 4.464439200000000000e+07 +9.074999999999999289e+00 4.282458000000000000e+07 +1.008333333333333215e+01 4.530382400000000000e+07 +1.109166666666666679e+01 4.359265600000000000e+07 +1.209999999999999964e+01 4.293948800000000000e+07 +1.310833333333333250e+01 4.332887200000000000e+07 +1.411666666666666714e+01 4.336192800000000000e+07 +1.512500000000000000e+01 4.382769200000000000e+07 +1.613333333333333286e+01 4.316155200000000000e+07 +1.714166666666666572e+01 4.304653600000000000e+07 +1.814999999999999858e+01 4.266971200000000000e+07 +1.915833333333333144e+01 4.258350000000000000e+07 +2.016666666666666430e+01 4.352450400000000000e+07 +2.117500000000000071e+01 4.243902000000000000e+07 +2.218333333333333357e+01 4.283452000000000000e+07 +2.319166666666666643e+01 4.158014400000000000e+07 +2.419999999999999929e+01 4.119976000000000000e+07 +2.520833333333333215e+01 4.087552000000000000e+07 +2.621666666666666501e+01 4.091136400000000000e+07 +2.722499999999999787e+01 4.239316000000000000e+07 +2.823333333333333428e+01 4.287269200000000000e+07 +2.924166666666666714e+01 4.120102400000000000e+07 +3.025000000000000000e+01 4.015220800000000000e+07 +3.125833333333333286e+01 4.016066400000000000e+07 +3.226666666666666572e+01 3.967920800000000000e+07 +3.327499999999999858e+01 3.997936800000000000e+07 +3.428333333333333144e+01 4.007656800000000000e+07 +3.529166666666666430e+01 4.025739200000000000e+07 +3.629999999999999716e+01 4.124155200000000000e+07 +3.730833333333333002e+01 4.148746400000000000e+07 +3.831666666666666288e+01 4.180901600000000000e+07 +3.932499999999999574e+01 4.140894400000000000e+07 +4.033333333333332860e+01 4.306017600000000000e+07 +4.134166666666666856e+01 4.249212800000000000e+07 +4.235000000000000142e+01 4.041435600000000000e+07 +4.335833333333333428e+01 4.152126800000000000e+07 +4.436666666666666714e+01 4.121411600000000000e+07 +4.537500000000000000e+01 4.192129600000000000e+07 +4.638333333333333286e+01 4.109799200000000000e+07 +4.739166666666666572e+01 4.033575200000000000e+07 +4.839999999999999858e+01 4.107360800000000000e+07 +4.940833333333333144e+01 4.144730800000000000e+07 +5.041666666666666430e+01 3.966359600000000000e+07 +5.142499999999999716e+01 4.033454400000000000e+07 +5.243333333333333002e+01 4.060265600000000000e+07 +5.344166666666666288e+01 4.094939200000000000e+07 +5.444999999999999574e+01 4.015024400000000000e+07 +5.545833333333332860e+01 4.134372800000000000e+07 +5.646666666666666856e+01 4.179562800000000000e+07 +5.747500000000000142e+01 3.928744800000000000e+07 +5.848333333333333428e+01 4.080628400000000000e+07 +5.949166666666666714e+01 4.106670400000000000e+07 +6.050000000000000000e+01 4.337183600000000000e+07 +6.150833333333333286e+01 7.141752000000000000e+07 +6.251666666666666572e+01 1.156610400000000000e+08 +6.352499999999999858e+01 1.449754720000000000e+08 +6.453333333333333144e+01 1.381191200000000000e+08 +6.554166666666667140e+01 1.168592960000000000e+08 +6.654999999999999716e+01 1.054670480000000000e+08 +6.755833333333333712e+01 1.028518720000000000e+08 +6.856666666666666288e+01 1.016387040000000000e+08 +6.957500000000000284e+01 1.029092320000000000e+08 +7.058333333333332860e+01 1.037260640000000000e+08 +7.159166666666666856e+01 1.079606240000000000e+08 +7.259999999999999432e+01 1.086168480000000000e+08 +7.360833333333333428e+01 1.102378400000000000e+08 +7.461666666666666003e+01 1.135538880000000000e+08 +7.562500000000000000e+01 1.135737680000000000e+08 +7.663333333333332575e+01 1.144591200000000000e+08 +7.764166666666666572e+01 1.149796800000000000e+08 +7.864999999999999147e+01 1.165001600000000000e+08 +7.965833333333333144e+01 1.161007920000000000e+08 +8.066666666666665719e+01 1.152422320000000000e+08 +8.167499999999999716e+01 1.161203280000000000e+08 +8.268333333333333712e+01 1.154573760000000000e+08 +8.369166666666666288e+01 1.154438720000000000e+08 +8.470000000000000284e+01 1.174812000000000000e+08 +8.570833333333332860e+01 1.164923520000000000e+08 +8.671666666666666856e+01 1.158027200000000000e+08 +8.772499999999999432e+01 1.162023360000000000e+08 +8.873333333333333428e+01 1.155393760000000000e+08 +8.974166666666666003e+01 1.157245840000000000e+08 +9.075000000000000000e+01 1.157727920000000000e+08 +9.175833333333332575e+01 1.144853360000000000e+08 +9.276666666666666572e+01 1.146373280000000000e+08 +9.377499999999999147e+01 1.137720480000000000e+08 +9.478333333333333144e+01 1.122964560000000000e+08 +9.579166666666665719e+01 1.129900640000000000e+08 +9.679999999999999716e+01 1.123122320000000000e+08 +9.780833333333333712e+01 1.119554160000000000e+08 +9.881666666666666288e+01 1.105969760000000000e+08 +9.982500000000000284e+01 1.096567360000000000e+08 +1.008333333333333286e+02 1.118300160000000000e+08 +1.018416666666666686e+02 1.097313760000000000e+08 +1.028499999999999943e+02 1.083385040000000000e+08 +1.038583333333333343e+02 1.063102080000000000e+08 +1.048666666666666600e+02 1.065440160000000000e+08 +1.058750000000000000e+02 1.048883360000000000e+08 +1.068833333333333258e+02 1.079413200000000000e+08 +1.078916666666666657e+02 1.037431200000000000e+08 +1.088999999999999915e+02 1.018428880000000000e+08 +1.099083333333333314e+02 1.059902800000000000e+08 +1.109166666666666572e+02 1.090612240000000000e+08 +1.119249999999999972e+02 1.083638480000000000e+08 +1.129333333333333371e+02 1.125011680000000000e+08 +1.139416666666666629e+02 1.100336000000000000e+08 +1.149500000000000028e+02 1.093645520000000000e+08 +1.159583333333333286e+02 1.095052160000000000e+08 +1.169666666666666686e+02 1.098423600000000000e+08 +1.179749999999999943e+02 1.096359920000000000e+08 +1.189833333333333343e+02 1.095714720000000000e+08 +1.199916666666666600e+02 1.088480000000000000e+08 +1.210000000000000000e+02 1.096078240000000000e+08 diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/NaCl-95017.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/NaCl-95017.csv new file mode 100644 index 0000000..5f92bca --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/NaCl-95017.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 3.522964000000000000e+07 +1.008333333333333304e+00 3.568271200000000000e+07 +2.016666666666666607e+00 3.556776000000000000e+07 +3.024999999999999911e+00 3.340027000000000000e+07 +4.033333333333333215e+00 3.516885600000000000e+07 +5.041666666666666075e+00 3.520857200000000000e+07 +6.049999999999999822e+00 3.758441600000000000e+07 +7.058333333333333570e+00 3.599689200000000000e+07 +8.066666666666666430e+00 3.657045600000000000e+07 +9.074999999999999289e+00 3.580348000000000000e+07 +1.008333333333333215e+01 3.714878400000000000e+07 +1.109166666666666679e+01 3.662171600000000000e+07 +1.209999999999999964e+01 3.411759600000000000e+07 +1.310833333333333250e+01 3.577781200000000000e+07 +1.411666666666666714e+01 3.505512000000000000e+07 +1.512500000000000000e+01 3.420848000000000000e+07 +1.613333333333333286e+01 3.662299200000000000e+07 +1.714166666666666572e+01 3.439826800000000000e+07 +1.814999999999999858e+01 3.579360000000000000e+07 +1.915833333333333144e+01 4.078491200000000000e+07 +2.016666666666666430e+01 6.689615600000000000e+07 +2.117500000000000071e+01 1.114236400000000000e+08 +2.218333333333333357e+01 1.413294240000000000e+08 +2.319166666666666643e+01 1.443977760000000000e+08 +2.419999999999999929e+01 1.340049200000000000e+08 +2.520833333333333215e+01 1.269089280000000000e+08 +2.621666666666666501e+01 1.273327920000000000e+08 +2.722499999999999787e+01 1.269708560000000000e+08 +2.823333333333333428e+01 1.271573520000000000e+08 +2.924166666666666714e+01 1.265738560000000000e+08 +3.025000000000000000e+01 1.225522240000000000e+08 +3.125833333333333286e+01 1.253445440000000000e+08 +3.226666666666666572e+01 1.252980720000000000e+08 +3.327499999999999858e+01 1.269196320000000000e+08 +3.428333333333333144e+01 1.294372480000000000e+08 +3.529166666666666430e+01 1.349380000000000000e+08 +3.629999999999999716e+01 1.383393280000000000e+08 +3.730833333333333002e+01 1.414430720000000000e+08 +3.831666666666666288e+01 1.440518720000000000e+08 +3.932499999999999574e+01 1.398744320000000000e+08 +4.033333333333332860e+01 1.391776320000000000e+08 +4.134166666666666856e+01 1.395795520000000000e+08 +4.235000000000000142e+01 1.387792320000000000e+08 +4.335833333333333428e+01 1.398985600000000000e+08 +4.436666666666666714e+01 1.386660800000000000e+08 +4.537500000000000000e+01 1.374674080000000000e+08 +4.638333333333333286e+01 1.406484640000000000e+08 +4.739166666666666572e+01 1.416141760000000000e+08 +4.839999999999999858e+01 1.416871520000000000e+08 +4.940833333333333144e+01 1.409804960000000000e+08 +5.041666666666666430e+01 1.407893120000000000e+08 +5.142499999999999716e+01 1.420301440000000000e+08 +5.243333333333333002e+01 1.411359520000000000e+08 +5.344166666666666288e+01 1.396859840000000000e+08 +5.444999999999999574e+01 1.421249920000000000e+08 +5.545833333333332860e+01 1.420967040000000000e+08 +5.646666666666666856e+01 1.404420800000000000e+08 +5.747500000000000142e+01 1.389450720000000000e+08 +5.848333333333333428e+01 1.405049280000000000e+08 +5.949166666666666714e+01 1.398428480000000000e+08 +6.050000000000000000e+01 1.394228640000000000e+08 +6.150833333333333286e+01 1.388050560000000000e+08 +6.251666666666666572e+01 1.381165920000000000e+08 +6.352499999999999858e+01 1.401671680000000000e+08 +6.453333333333333144e+01 1.395625120000000000e+08 +6.554166666666667140e+01 1.379917760000000000e+08 +6.654999999999999716e+01 1.383876960000000000e+08 +6.755833333333333712e+01 1.414599680000000000e+08 +6.856666666666666288e+01 1.413861760000000000e+08 +6.957500000000000284e+01 1.398839200000000000e+08 +7.058333333333332860e+01 1.407741920000000000e+08 +7.159166666666666856e+01 1.381179200000000000e+08 +7.259999999999999432e+01 1.378299200000000000e+08 +7.360833333333333428e+01 1.378696960000000000e+08 +7.461666666666666003e+01 1.367285120000000000e+08 +7.562500000000000000e+01 1.371200000000000000e+08 +7.663333333333332575e+01 1.372702400000000000e+08 +7.764166666666666572e+01 1.348669120000000000e+08 +7.864999999999999147e+01 1.374659200000000000e+08 +7.965833333333333144e+01 1.400137920000000000e+08 +8.066666666666665719e+01 1.415123840000000000e+08 +8.167499999999999716e+01 1.416187200000000000e+08 +8.268333333333333712e+01 1.392053920000000000e+08 +8.369166666666666288e+01 1.389063360000000000e+08 +8.470000000000000284e+01 1.372563200000000000e+08 +8.570833333333332860e+01 1.378095360000000000e+08 +8.671666666666666856e+01 1.355738240000000000e+08 +8.772499999999999432e+01 1.371024160000000000e+08 +8.873333333333333428e+01 1.356694400000000000e+08 +8.974166666666666003e+01 1.348125280000000000e+08 +9.075000000000000000e+01 1.364826080000000000e+08 +9.175833333333332575e+01 1.348311680000000000e+08 +9.276666666666666572e+01 1.322980960000000000e+08 +9.377499999999999147e+01 1.347531360000000000e+08 +9.478333333333333144e+01 1.358829600000000000e+08 +9.579166666666665719e+01 1.334823680000000000e+08 +9.679999999999999716e+01 1.316352320000000000e+08 +9.780833333333333712e+01 1.297853600000000000e+08 +9.881666666666666288e+01 1.325978720000000000e+08 +9.982500000000000284e+01 1.379783040000000000e+08 +1.008333333333333286e+02 1.384021760000000000e+08 +1.018416666666666686e+02 1.339016720000000000e+08 +1.028499999999999943e+02 1.339786000000000000e+08 +1.038583333333333343e+02 1.327476320000000000e+08 +1.048666666666666600e+02 1.343115200000000000e+08 +1.058750000000000000e+02 1.351975680000000000e+08 +1.068833333333333258e+02 1.335174880000000000e+08 +1.078916666666666657e+02 1.298355680000000000e+08 +1.088999999999999915e+02 1.228193840000000000e+08 +1.099083333333333314e+02 1.160383040000000000e+08 +1.109166666666666572e+02 1.071615520000000000e+08 +1.119249999999999972e+02 1.014399040000000000e+08 +1.129333333333333371e+02 1.036868480000000000e+08 +1.139416666666666629e+02 1.023876480000000000e+08 +1.149500000000000028e+02 1.050239040000000000e+08 +1.159583333333333286e+02 1.066595120000000000e+08 +1.169666666666666686e+02 1.098060480000000000e+08 +1.179749999999999943e+02 1.085492960000000000e+08 +1.189833333333333343e+02 1.051797120000000000e+08 +1.199916666666666600e+02 1.068129280000000000e+08 +1.210000000000000000e+02 1.111378080000000000e+08 diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/carbon_black-94519.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/carbon_black-94519.csv new file mode 100644 index 0000000..4c35b46 --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/carbon_black-94519.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 1.377591680000000000e+08 +1.008333333333333304e+00 1.406833120000000000e+08 +2.016666666666666607e+00 1.397596800000000000e+08 +3.024999999999999911e+00 1.405597760000000000e+08 +4.033333333333333215e+00 1.396667840000000000e+08 +5.041666666666666075e+00 1.413643520000000000e+08 +6.049999999999999822e+00 1.423704640000000000e+08 +7.058333333333333570e+00 1.437309760000000000e+08 +8.066666666666666430e+00 1.445266400000000000e+08 +9.074999999999999289e+00 1.436100960000000000e+08 +1.008333333333333215e+01 1.452912800000000000e+08 +1.109166666666666679e+01 1.445481280000000000e+08 +1.209999999999999964e+01 1.439958400000000000e+08 +1.310833333333333250e+01 1.460131520000000000e+08 +1.411666666666666714e+01 1.460922560000000000e+08 +1.512500000000000000e+01 1.445242240000000000e+08 +1.613333333333333286e+01 1.452464960000000000e+08 +1.714166666666666572e+01 1.478931840000000000e+08 +1.814999999999999858e+01 1.465644160000000000e+08 +1.915833333333333144e+01 1.475947520000000000e+08 +2.016666666666666430e+01 1.460047680000000000e+08 +2.117500000000000071e+01 1.485704960000000000e+08 +2.218333333333333357e+01 2.116406240000000000e+08 +2.319166666666666643e+01 5.109036480000000000e+08 +2.419999999999999929e+01 9.724240640000000000e+08 +2.520833333333333215e+01 1.246411776000000000e+09 +2.621666666666666501e+01 1.183032192000000000e+09 +2.722499999999999787e+01 9.740386560000000000e+08 +2.823333333333333428e+01 8.709547520000000000e+08 +2.924166666666666714e+01 8.625374720000000000e+08 +3.025000000000000000e+01 8.616341120000000000e+08 +3.125833333333333286e+01 8.618775040000000000e+08 +3.226666666666666572e+01 8.623905280000000000e+08 +3.327499999999999858e+01 8.614231040000000000e+08 +3.428333333333333144e+01 8.606934400000000000e+08 +3.529166666666666430e+01 8.597089280000000000e+08 +3.629999999999999716e+01 8.578350080000000000e+08 +3.730833333333333002e+01 8.541014400000000000e+08 +3.831666666666666288e+01 8.516895360000000000e+08 +3.932499999999999574e+01 8.494691200000000000e+08 +4.033333333333332860e+01 8.447370240000000000e+08 +4.134166666666666856e+01 8.429112320000000000e+08 +4.235000000000000142e+01 8.407536000000000000e+08 +4.335833333333333428e+01 8.360875520000000000e+08 +4.436666666666666714e+01 8.335380480000000000e+08 +4.537500000000000000e+01 8.310956160000000000e+08 +4.638333333333333286e+01 8.259228160000000000e+08 +4.739166666666666572e+01 8.227412480000000000e+08 +4.839999999999999858e+01 8.190304000000000000e+08 +4.940833333333333144e+01 8.158649600000000000e+08 +5.041666666666666430e+01 8.108427520000000000e+08 +5.142499999999999716e+01 8.067724800000000000e+08 +5.243333333333333002e+01 8.044174080000000000e+08 +5.344166666666666288e+01 8.031783680000000000e+08 +5.444999999999999574e+01 8.015225600000000000e+08 +5.545833333333332860e+01 8.004728320000000000e+08 +5.646666666666666856e+01 8.017263360000000000e+08 +5.747500000000000142e+01 8.131904000000000000e+08 +5.848333333333333428e+01 8.131024640000000000e+08 +5.949166666666666714e+01 8.120432640000000000e+08 +6.050000000000000000e+01 8.105748480000000000e+08 +6.150833333333333286e+01 8.114499840000000000e+08 +6.251666666666666572e+01 8.085486080000000000e+08 +6.352499999999999858e+01 8.079965440000000000e+08 +6.453333333333333144e+01 8.064606720000000000e+08 +6.554166666666667140e+01 7.913469440000000000e+08 +6.654999999999999716e+01 7.162200960000000000e+08 +6.755833333333333712e+01 6.065536000000000000e+08 +6.856666666666666288e+01 5.624327040000000000e+08 +6.957500000000000284e+01 5.597957120000000000e+08 +7.058333333333332860e+01 5.594403840000000000e+08 +7.159166666666666856e+01 5.625560320000000000e+08 +7.259999999999999432e+01 5.607992960000000000e+08 +7.360833333333333428e+01 5.530339200000000000e+08 +7.461666666666666003e+01 5.551884800000000000e+08 +7.562500000000000000e+01 5.536418560000000000e+08 +7.663333333333332575e+01 5.534088960000000000e+08 +7.764166666666666572e+01 5.785730560000000000e+08 +7.864999999999999147e+01 5.659896960000000000e+08 +7.965833333333333144e+01 5.572739200000000000e+08 +8.066666666666665719e+01 5.584353920000000000e+08 +8.167499999999999716e+01 5.522748800000000000e+08 +8.268333333333333712e+01 5.422984960000000000e+08 +8.369166666666666288e+01 5.417317760000000000e+08 +8.470000000000000284e+01 5.429344640000000000e+08 +8.570833333333332860e+01 5.472798080000000000e+08 +8.671666666666666856e+01 5.460882560000000000e+08 +8.772499999999999432e+01 5.713745920000000000e+08 +8.873333333333333428e+01 5.581912320000000000e+08 +8.974166666666666003e+01 5.660707840000000000e+08 +9.075000000000000000e+01 5.492231680000000000e+08 +9.175833333333332575e+01 5.453797760000000000e+08 +9.276666666666666572e+01 5.369918720000000000e+08 +9.377499999999999147e+01 5.413032960000000000e+08 +9.478333333333333144e+01 5.505628160000000000e+08 +9.579166666666665719e+01 5.364636480000000000e+08 +9.679999999999999716e+01 5.425648640000000000e+08 +9.780833333333333712e+01 5.406475520000000000e+08 +9.881666666666666288e+01 5.369661440000000000e+08 +9.982500000000000284e+01 5.448457600000000000e+08 +1.008333333333333286e+02 5.355694400000000000e+08 +1.018416666666666686e+02 5.440951680000000000e+08 +1.028499999999999943e+02 5.358801280000000000e+08 +1.038583333333333343e+02 5.399360640000000000e+08 +1.048666666666666600e+02 5.297328640000000000e+08 +1.058750000000000000e+02 5.430506240000000000e+08 +1.068833333333333258e+02 5.379313920000000000e+08 +1.078916666666666657e+02 5.459512960000000000e+08 +1.088999999999999915e+02 5.523472000000000000e+08 +1.099083333333333314e+02 5.371033600000000000e+08 +1.109166666666666572e+02 5.369039360000000000e+08 +1.119249999999999972e+02 5.677847680000000000e+08 +1.129333333333333371e+02 5.401000320000000000e+08 +1.139416666666666629e+02 5.380368640000000000e+08 +1.149500000000000028e+02 5.408871040000000000e+08 +1.159583333333333286e+02 5.358821120000000000e+08 +1.169666666666666686e+02 5.500618880000000000e+08 +1.179749999999999943e+02 5.494726400000000000e+08 +1.189833333333333343e+02 5.399372800000000000e+08 +1.199916666666666600e+02 5.505455360000000000e+08 +1.210000000000000000e+02 5.737535360000000000e+08 diff --git a/src/xrpd_toolbox/i15_1/sample_alignment_data/water-94520.csv b/src/xrpd_toolbox/i15_1/sample_alignment_data/water-94520.csv new file mode 100644 index 0000000..238423d --- /dev/null +++ b/src/xrpd_toolbox/i15_1/sample_alignment_data/water-94520.csv @@ -0,0 +1,121 @@ +0.000000000000000000e+00 1.449017600000000000e+08 +1.008333333333333304e+00 1.458960640000000000e+08 +2.016666666666666607e+00 1.459970400000000000e+08 +3.024999999999999911e+00 1.454245440000000000e+08 +4.033333333333333215e+00 1.452668960000000000e+08 +5.041666666666666075e+00 1.455336000000000000e+08 +6.049999999999999822e+00 1.453294560000000000e+08 +7.058333333333333570e+00 1.441366720000000000e+08 +8.066666666666666430e+00 1.455931520000000000e+08 +9.074999999999999289e+00 1.452171520000000000e+08 +1.008333333333333215e+01 1.447066560000000000e+08 +1.109166666666666679e+01 1.456973120000000000e+08 +1.209999999999999964e+01 1.441247840000000000e+08 +1.310833333333333250e+01 1.453886400000000000e+08 +1.411666666666666714e+01 1.447000320000000000e+08 +1.512500000000000000e+01 1.442922080000000000e+08 +1.613333333333333286e+01 1.450781440000000000e+08 +1.714166666666666572e+01 1.438343840000000000e+08 +1.814999999999999858e+01 1.433143360000000000e+08 +1.915833333333333144e+01 1.439086720000000000e+08 +2.016666666666666430e+01 1.450504480000000000e+08 +2.117500000000000071e+01 1.872140480000000000e+08 +2.218333333333333357e+01 4.462410880000000000e+08 +2.319166666666666643e+01 9.023895040000000000e+08 +2.419999999999999929e+01 1.231362432000000000e+09 +2.520833333333333215e+01 1.259544064000000000e+09 +2.621666666666666501e+01 1.094915328000000000e+09 +2.722499999999999787e+01 9.677130240000000000e+08 +2.823333333333333428e+01 8.703262720000000000e+08 +2.924166666666666714e+01 6.949149440000000000e+08 +3.025000000000000000e+01 5.585233920000000000e+08 +3.125833333333333286e+01 5.314554240000000000e+08 +3.226666666666666572e+01 5.299416960000000000e+08 +3.327499999999999858e+01 5.295399680000000000e+08 +3.428333333333333144e+01 5.285449280000000000e+08 +3.529166666666666430e+01 5.287374080000000000e+08 +3.629999999999999716e+01 5.284835200000000000e+08 +3.730833333333333002e+01 5.287966720000000000e+08 +3.831666666666666288e+01 5.291780160000000000e+08 +3.932499999999999574e+01 5.279539840000000000e+08 +4.033333333333332860e+01 5.266706240000000000e+08 +4.134166666666666856e+01 5.375146240000000000e+08 +4.235000000000000142e+01 6.221213440000000000e+08 +4.335833333333333428e+01 8.029190400000000000e+08 +4.436666666666666714e+01 9.401991040000000000e+08 +4.537500000000000000e+01 9.709915520000000000e+08 +4.638333333333333286e+01 9.724789760000000000e+08 +4.739166666666666572e+01 9.725920640000000000e+08 +4.839999999999999858e+01 9.731558400000000000e+08 +4.940833333333333144e+01 9.727699200000000000e+08 +5.041666666666666430e+01 9.705978240000000000e+08 +5.142499999999999716e+01 9.737093120000000000e+08 +5.243333333333333002e+01 9.723189760000000000e+08 +5.344166666666666288e+01 9.745209600000000000e+08 +5.444999999999999574e+01 9.726368640000000000e+08 +5.545833333333332860e+01 9.736901120000000000e+08 +5.646666666666666856e+01 9.735059840000000000e+08 +5.747500000000000142e+01 9.732435840000000000e+08 +5.848333333333333428e+01 9.746139520000000000e+08 +5.949166666666666714e+01 9.736100480000000000e+08 +6.050000000000000000e+01 9.743711360000000000e+08 +6.150833333333333286e+01 9.726291840000000000e+08 +6.251666666666666572e+01 9.740900480000000000e+08 +6.352499999999999858e+01 9.752416000000000000e+08 +6.453333333333333144e+01 9.735466240000000000e+08 +6.554166666666667140e+01 9.729325440000000000e+08 +6.654999999999999716e+01 9.328379520000000000e+08 +6.755833333333333712e+01 7.771297280000000000e+08 +6.856666666666666288e+01 5.991376000000000000e+08 +6.957500000000000284e+01 5.364492800000000000e+08 +7.058333333333332860e+01 5.324243520000000000e+08 +7.159166666666666856e+01 5.307462400000000000e+08 +7.259999999999999432e+01 5.296631040000000000e+08 +7.360833333333333428e+01 5.307827840000000000e+08 +7.461666666666666003e+01 5.286820160000000000e+08 +7.562500000000000000e+01 5.296255680000000000e+08 +7.663333333333332575e+01 5.281068800000000000e+08 +7.764166666666666572e+01 5.277863680000000000e+08 +7.864999999999999147e+01 5.276912000000000000e+08 +7.965833333333333144e+01 5.335940160000000000e+08 +8.066666666666665719e+01 5.361155200000000000e+08 +8.167499999999999716e+01 5.362858880000000000e+08 +8.268333333333333712e+01 5.369864320000000000e+08 +8.369166666666666288e+01 5.482195200000000000e+08 +8.470000000000000284e+01 6.417559040000000000e+08 +8.570833333333332860e+01 8.312894720000000000e+08 +8.671666666666666856e+01 9.603690240000000000e+08 +8.772499999999999432e+01 9.862875520000000000e+08 +8.873333333333333428e+01 9.872969600000000000e+08 +8.974166666666666003e+01 9.874996480000000000e+08 +9.075000000000000000e+01 9.882850560000000000e+08 +9.175833333333332575e+01 9.881093760000000000e+08 +9.276666666666666572e+01 9.871802880000000000e+08 +9.377499999999999147e+01 9.886852480000000000e+08 +9.478333333333333144e+01 9.646420480000000000e+08 +9.579166666666665719e+01 8.254586880000000000e+08 +9.679999999999999716e+01 6.311121920000000000e+08 +9.780833333333333712e+01 5.462680960000000000e+08 +9.881666666666666288e+01 5.400590720000000000e+08 +9.982500000000000284e+01 5.386460160000000000e+08 +1.008333333333333286e+02 5.391397120000000000e+08 +1.018416666666666686e+02 5.364253120000000000e+08 +1.028499999999999943e+02 5.364563200000000000e+08 +1.038583333333333343e+02 5.368830080000000000e+08 +1.048666666666666600e+02 5.393338240000000000e+08 +1.058750000000000000e+02 5.406700160000000000e+08 +1.068833333333333258e+02 5.400839680000000000e+08 +1.078916666666666657e+02 5.419340800000000000e+08 +1.088999999999999915e+02 6.008361600000000000e+08 +1.099083333333333314e+02 7.759524480000000000e+08 +1.109166666666666572e+02 9.364953600000000000e+08 +1.119249999999999972e+02 9.826758400000000000e+08 +1.129333333333333371e+02 9.847898880000000000e+08 +1.139416666666666629e+02 9.862750080000000000e+08 +1.149500000000000028e+02 9.868202240000000000e+08 +1.159583333333333286e+02 9.862291840000000000e+08 +1.169666666666666686e+02 9.869008000000000000e+08 +1.179749999999999943e+02 9.861032960000000000e+08 +1.189833333333333343e+02 9.877442560000000000e+08 +1.199916666666666600e+02 9.884719360000000000e+08 +1.210000000000000000e+02 9.860961280000000000e+08 diff --git a/src/xrpd_toolbox/plotting.py b/src/xrpd_toolbox/plotting.py new file mode 100644 index 0000000..c627221 --- /dev/null +++ b/src/xrpd_toolbox/plotting.py @@ -0,0 +1,73 @@ +import matplotlib.pyplot as plt +import numpy as np + +from xrpd_toolbox.core import ( + SerialisableNDArray, + XRPDBaseModel, + XYEData, +) +from xrpd_toolbox.utils.messenger import Messenger + + +class DataPlot(XRPDBaseModel): + data: XYEData + title: str | None = None + + def plot(self): + if self.title is not None: + plt.title(self.title) + plt.scatter(self.data.x, self.data.y, label="Obs", color="black", s=5) + plt.xlabel(self.data.x_unit) + plt.ylabel(self.data.y_unit) + plt.legend() + plt.show() + + def publish(self, beamline: str): + messenger = Messenger(beamline) + messenger.send_plot_data(self) + + +class FittedDataPlot(DataPlot): + calc: SerialisableNDArray + diff: SerialisableNDArray + background: SerialisableNDArray | float | None = None + markers: SerialisableNDArray | None = None + + def plot(self, save_to: str | None = None): + if isinstance(self.background, float): + background = [self.background] * len(self.data.x) + elif isinstance(self.background, np.ndarray): + background = self.background + else: + background = self.background + + offset = -0.1 * self.data.y.max() + if self.title is not None: + plt.title(self.title) + plt.scatter(self.data.x, self.data.y, label="Obs", color="black", s=5) + plt.plot(self.data.x, self.calc, label="Calc", color="red") + if background is not None: + plt.plot(self.data.x, background, label="Background") + plt.plot( + self.data.x, + self.data.y - self.calc + offset, + label="Obs-Calc", + color="blue", + ) + + if self.markers is not None: + plt.vlines( + self.markers, + 0, + self.data.y.max() / 10, + color="magenta", + label="Marker", + ) + + plt.xlabel(self.data.x_unit) + plt.ylabel(self.data.y_unit) + plt.legend() + if save_to is not None: + plt.savefig(save_to) + else: + plt.show() diff --git a/src/xrpd_toolbox/utils/cif_reader.py b/src/xrpd_toolbox/utils/cif_reader.py new file mode 100644 index 0000000..861aebe --- /dev/null +++ b/src/xrpd_toolbox/utils/cif_reader.py @@ -0,0 +1,134 @@ +from pathlib import Path + +import numpy as np +from CifFile import ReadCif + +from xrpd_toolbox.utils.utils import parse_numbers_with_error + +# TODO: do the comment below +# Use U_iso for computation / modeling +# Accept B_iso when reading external data + +# uiso- = direct measure of atomic displacement (mean-square displacement). +# biso - debye waller factor + + +# @njit() +def u_iso_to_b_iso(u_iso: np.ndarray) -> np.ndarray: + return 8 * np.pi**2 * u_iso + + +# @njit() +def b_iso_to_u_iso(b_iso: np.ndarray) -> np.ndarray: + return b_iso / (8 * np.pi**2) + + +###cif reader +def open_cif(cif_filepath: str | Path, block_number: int = 0) -> dict: + """opens the cif and returns a dict-like representation of the cif""" + cif = ReadCif(cif_filepath) + block_name = list(cif.keys())[block_number] + block = cif[block_name] + + return block + + +def get_symmetry_operation_from_cif(cif_filepath: str | Path, block_number: int = 0): + block = open_cif(cif_filepath=cif_filepath, block_number=block_number) + synmmetry_operations = np.array(block["_space_group_symop_operation_xyz"]) + + return synmmetry_operations + + +def read_cif(cif_filepath: str | Path, block_number: int = 0) -> tuple: + """reads data from a cif and returns + list of Atom classes and a unit cell class""" + + # TODO: make this use the errors + + block = open_cif(cif_filepath=cif_filepath, block_number=block_number) + + x = np.array(block["_atom_site_fract_x"], dtype=str) + x, x_e = parse_numbers_with_error(x) + y = np.array(block["_atom_site_fract_y"], dtype=str) + y, y_e = parse_numbers_with_error(y) + + z = np.array(block["_atom_site_fract_z"], dtype=str) + z, z_e = parse_numbers_with_error(z) + + atom_labels = np.array(block["_atom_site_label"]) + + if "_atom_site_type_symbol" in block: + elements = np.array(block["_atom_site_type_symbol"]) + else: + elements = atom_labels.copy() + + elements = np.array([el.capitalize() for el in elements]) + + occupancies = ( + np.array(block["_atom_site_occupancy"], dtype=str) + if "_atom_site_occupancy" in block + else np.ones(len(x)) + ) + + occupancies, occupancies_e = parse_numbers_with_error(occupancies) + + # --- B_iso or U_iso handling --- + if "_atom_site_B_iso_or_equiv" in block: + b_iso = np.array(block["_atom_site_B_iso_or_equiv"], dtype=str) + + elif "_atom_site_U_iso_or_equiv" in block: + u_iso = np.array(block["_atom_site_U_iso_or_equiv"], dtype=str) + u_iso, u_iso_e = parse_numbers_with_error(u_iso) + b_iso = u_iso_to_b_iso(u_iso) + + else: + b_iso = np.tile(0.5, len(x)) # fallback + b_iso, b_iso_e = parse_numbers_with_error(b_iso) + + if "_symmetry_space_group_name_H-M" in block: + spacegroup_symbol = block["_symmetry_space_group_name_H-M"] + elif "_space_group_name_H-M_alt" in block: + spacegroup_symbol = block["_space_group_name_H-M_alt"] + else: + print("_symmetry_space_group_name_H-M not in cif") + spacegroup_symbol = "P1" + + if "_space_group_symop_operation_xyz" in block: + symmetry_operations = np.array(block["_space_group_symop_operation_xyz"]) + elif "_symmetry_equiv_pos_as_xyz" in block: + symmetry_operations = np.array(block["_symmetry_equiv_pos_as_xyz"]) + else: + print("No symmetry operation in cif") + symmetry_operations = np.array([]) + + if "_chemical_name_mineral" in block: + name = block["_chemical_name_mineral"] + else: + name = None + + atoms = { + "labels": atom_labels, + "elements": elements, + "xyz": np.column_stack((x, y, z)), + "b_iso": b_iso, + "occupancies": occupancies, + } + + a, a_e = parse_numbers_with_error(block["_cell_length_a"]) + b, b_e = parse_numbers_with_error(block["_cell_length_b"]) + c, c_e = parse_numbers_with_error(block["_cell_length_c"]) + alpha, alpha_e = parse_numbers_with_error(block["_cell_angle_alpha"]) + beta, beta_e = parse_numbers_with_error(block["_cell_angle_beta"]) + gamma, gamma_e = parse_numbers_with_error(block["_cell_angle_gamma"]) + + lattice = { + "a": float(a), + "b": float(b), + "c": float(c), + "alpha": float(alpha), + "beta": float(beta), + "gamma": float(gamma), + } + + return spacegroup_symbol, lattice, atoms, symmetry_operations, name diff --git a/src/xrpd_toolbox/utils/energy.py b/src/xrpd_toolbox/utils/energy.py deleted file mode 100644 index a5f5673..0000000 --- a/src/xrpd_toolbox/utils/energy.py +++ /dev/null @@ -1,49 +0,0 @@ -from _collections_abc import Iterable -from typing import Literal - -import numpy as np - - -def beam_energy_to_wavelength( - beam_energy: float | int, unit: Literal["kev", "ev"] = "kev" -) -> float: - """ - - Calculates wavelength (Angstrom) from beam energy in kev. - - To allow convertion of tth to Q space, using the energy of the beam. beam energy is - converted to wavlength because it's better - - """ - if unit.lower() == "kev": - beam_energy_ev = beam_energy * 1000 - else: - beam_energy_ev = beam_energy - - ev_to_j = 1.602176634e-19 # electron volt to joule factor - h_planck = 6.62607015e-34 # h_planck plancks constant - c_speed_of_light = 299792458.0 # m/s - beam_energy_j = beam_energy_ev * ev_to_j - wavelength_m = (h_planck * c_speed_of_light) / (beam_energy_j) - wavelength = wavelength_m * 1e10 - - return wavelength - - -def tth_to_q(tth: Iterable[int | float] | int | float, wavelength: float) -> np.ndarray: - """ - - Converts a 2th angle to Q using the wavelength. Simple. - - Whatever unit wavelength is in, will be the unit of Q. - - https://www.ill.eu/fileadmin/user_upload/ILL/3_Users/Support_labs_infrastructure/Software-tools/DIF_tools/neutrons.html - - """ - - tth_array = np.array(tth, dtype=float) - - pi = 3.141592653589 - q_space = (4 * pi / wavelength) * np.sin(np.deg2rad(tth_array) / 2) - - return q_space diff --git a/src/xrpd_toolbox/utils/graph.py b/src/xrpd_toolbox/utils/graph.py new file mode 100644 index 0000000..c9cbf65 --- /dev/null +++ b/src/xrpd_toolbox/utils/graph.py @@ -0,0 +1,111 @@ +import logging +from collections.abc import Mapping +from pathlib import Path +from textwrap import dedent + +import httpx +from blueapi.utils import BlueapiBaseModel +from pydantic import Field, HttpUrl + +LOGGER = logging.getLogger(__name__) + + +class DirectoryPath(BlueapiBaseModel): + """ + Directory location and associated metadata + """ + + instrument: str + instrument_session: str = Field(alias="instrumentSession") + path: Path + + +class ScanPaths(BlueapiBaseModel): + """ + Description of where to write scan data + """ + + scan_file: str = Field(alias="scanFile") + scan_number: int = Field(alias="scanNumber") + directory: DirectoryPath + + +class NumtrackerScanMutationResponse(BlueapiBaseModel): + """ + Response from numtracker server when creating a new scan + """ + + scan: ScanPaths + + +class NumtrackerClient: + """ + Client for numtracker: https://github.com/DiamondLightSource/numtracker + Can be used to assign new scan numbers. + """ + + def __init__( + self, + url: HttpUrl, + ) -> None: + self._url = url + self._headers: Mapping[str, str] = {} + + def set_headers(self, headers: Mapping[str, str]) -> None: + """ + Set default HTTP headers + + Args: + headers: headers to embed in every request. + """ + + self._headers = headers + + async def create_scan( + self, instrument_session: str, instrument: str + ) -> NumtrackerScanMutationResponse: + """ + Create a new scan with numtracker. + + Args: + instrument_session: The proposal number, proposal code and visit ID + e.g. cm12345-1 + + instrument: The instrument to write data on e.g. i22 + """ + + query = { + "query": dedent(f""" + mutation{{ + scan( + instrument: "{instrument}", + instrumentSession: "{instrument_session}" + ) {{ + directory{{ + instrumentSession + instrument + path + }} + scanFile + scanNumber + }} + }} + """) + } + + async with httpx.AsyncClient() as client: + response = await client.post( + self._url.unicode_string(), + headers=self._headers, + json=query, + ) + + response.raise_for_status() + json = response.json() + + if json.get("errors") is not None: + raise RuntimeError(f"Numtracker error: {json['errors']}") + + new_collection = NumtrackerScanMutationResponse.model_validate(json["data"]) + LOGGER.debug("New NumtrackerNewScan: %s", new_collection) + return new_collection diff --git a/src/xrpd_toolbox/utils/logger.py b/src/xrpd_toolbox/utils/logger.py new file mode 100644 index 0000000..bbb6d32 --- /dev/null +++ b/src/xrpd_toolbox/utils/logger.py @@ -0,0 +1,31 @@ +from datetime import datetime +from pathlib import Path + + +class AnalysisLogger: + def __init__( + self, log_filepath: str | Path, log_to_file: bool = False, beamline: str = "i11" + ): + self.log_filepath = Path(log_filepath) + self.log_to_file = log_to_file + + if not self.log_filepath.exists(): + self.log_filepath.parent.mkdir(parents=True, exist_ok=True) + elif self.log_filepath.exists() and (self.log_filepath.stat().st_size > 1e7): + self.log_filepath.unlink() + with open(self.log_filepath, "a+") as f: + f.write(f"Log File for {beamline} Data Reduction\n") + + with open(self.log_filepath, "a+") as f: + f.write("================================\n") + f.write(f"Datetime: {datetime.now()}\n") + f.write("================================\n") + + def log(self, *args, print_to_console=True): + if print_to_console: + print(*args) + + if self.log_to_file: + with open(self.log_filepath, "a") as f: + [f.write(str(m)) for m in args] + f.write("\n") diff --git a/src/xrpd_toolbox/utils/messenger.py b/src/xrpd_toolbox/utils/messenger.py new file mode 100644 index 0000000..7330a19 --- /dev/null +++ b/src/xrpd_toolbox/utils/messenger.py @@ -0,0 +1,210 @@ +import json +from collections import deque +from pathlib import Path +from shutil import copy2 +from time import sleep + +import stomp + +from xrpd_toolbox.core import XRPDBaseModel + +DEFAULT_BROKER = "rabbitmq" +DEFAULT_DESTINATIONS = [ + "/topic/public.worker.event", + "/topic/gda.messages.scan", +] + +DEFAULT_DII_UI_PLOT_DESTINATION = ( + "/topic/public.data.plot" # Currently prone to change as of 07/05/26 +) + + +class MessageUnpacker: + messages = deque() + + @staticmethod + def unpack_dict(unpacked: dict): + for key, value in unpacked.items(): + if isinstance(value, dict): + MessageUnpacker.unpack_dict(value) + else: + MessageUnpacker.messages.append(f"{key}: {value}") + + return MessageUnpacker.messages + + +class ScanListener(stomp.ConnectionListener): + def __init__(self, maxlen=100): + self.messages = deque(maxlen=maxlen) + + def on_error(self, message): # type: ignore + print(f"received an error: {message}") + + def on_message(self, message): # type: ignore + message_body: dict = json.loads(message.body) + self.messages.append(message_body) + + +class Messenger: + def __init__( + self, + beamline: str | None = None, + host: str | None = None, + broker: str | None = None, + port: int = 61613, + username: str | None = None, + password: str | None = None, + destinations: Path | list[Path] | str | list[str] | None = None, + auto_connect: bool = True, + **kwargs, + ): + self.beamline = beamline + self.host = host + self.port = port + self.broker = broker + self.port = port + + self.username = username + self.password = password + self.auto_connect = auto_connect + self.destinations = destinations + + # /topic/public.worker.event blueapi + # defined here https://github.com/DiamondLightSource/blueapi/blob/77129d132d5481b9d6adad3fe15c02d581aff9f7/docs/reference/asyncapi.yaml#L4 + + # "/topic/gda.messages.scan" # nexus file converter + # defined here: https://gitlab.diamond.ac.uk/daq/d2acq/services/nexus-file-converter/-/blob/master/src/main/resources/application.yaml + + if (beamline is not None) and (not beamline.startswith("i")): + print(f"{beamline} must start with i, eg i15-1, or i11") + + if not self.destinations: + print(f"No destination specified, defaulting to {DEFAULT_DESTINATIONS}") + self.destinations = DEFAULT_DESTINATIONS + + if not self.broker: + self.broker = DEFAULT_BROKER + + if not self.host and self.beamline: + print("Host not specified, constructing from beamline name") + self.host = f"{self.beamline}-{self.broker}-daq.diamond.ac.uk" + self.broker = "rabbitmq" + elif not self.host and self.beamline and (self.broker == "activemq"): + self.host = f"{self.beamline}-control" + self.broker = "activemq" + else: + raise ValueError("Either host or beamline must be provided") + + self.messages = deque() + self.scan_listener = ScanListener() + + self.run = True + + if self.auto_connect: + try: + self.setup_connection() + self.connect() + self.subscribe() + except Exception: + print(f"Could not connect to {self.host}") + + def setup_connection(self): + self.conn = stomp.Connection( + host_and_ports=[(self.host, self.port)], auto_content_length=False + ) + + self.conn.set_listener("scan_listener", self.scan_listener) + + def connect(self): + print("Connecting..") + + if self.username and self.password: + self.conn.connect(self.username, self.password, wait=True) + else: + self.conn.connect(wait=True) + + print("Connected to STOMP server at", self.host, self.port) + + def disconnect(self): + self.conn.disconnect() + + def subscribe(self): + if isinstance(self.destinations, list): + for i, dest in enumerate(self.destinations): + self.conn.subscribe(destination=dest, id=i + 1, ack="auto") + else: + self.conn.subscribe(destination=self.destinations, id=1, ack="auto") + + def send_file(self, path: str): + """Use this when you want dawn to open and plot a file""" + message = json.dumps({"filePath": path}) + destination = "/topic/org.dawnsci.file.topic" + self.send_message(destination, message) + + def send_start(self, path: str): + """use this in when doing live processing and it has started""" + message = json.dumps( + {"filePath": path, "status": "STARTED", "swmrStatus": "ENABLED"} + ) + destination = "/topic/gda.messages.processing" + self.send_message(destination, message) + + def send_update(self, path): + """use this in when doing live processing and it has started""" + + message = json.dumps( + {"filePath": path, "status": "UPDATED", "swmrStatus": "ACTIVE"} + ) + destination = "/topic/gda.messages.processing" + self.send_message(destination, message) + + def send_finished(self, path): + message = json.dumps( + {"filePath": path, "status": "FINISHED", "swmrStatus": "ACTIVE"} + ) + destination = "/topic/gda.messages.processing" + self.send_message(destination, message) + + def send_message(self, destination: str, message: str): + try: + self.conn.send(destination=destination, body=message, ack="auto") + print(f"Message sent to: {destination}") + except Exception: + print("Could not send message!") + + def stop(self): + """Stop listening to destinations""" + self.run = False + + def get_message(self): + return self.scan_listener.messages.popleft() + + def send_plot_data(self, plot_data: XRPDBaseModel): + """Pass this a PlotData object and it will serialise it + and send it to RabbitMQ telling the UI to plot it""" + self.send_message(DEFAULT_DII_UI_PLOT_DESTINATION, plot_data.model_dump_json()) + + def listen(self, max_iter: int = 50, interval: float | int = 1.0): + c = 0 + self.run = True + + while (self.run is True) and (c < max_iter): + if self.scan_listener.messages: + print("Processing message:", self.scan_listener.messages.popleft()) + sleep(interval) + c += 1 + + def send_to_ispyb(self, original_filepath: str, filepath_out: str) -> None: + p = Path(original_filepath) + magic_path = p.parent / ".ispyb" / (p.stem + "_mythen_nx/data.dat") + copy2(filepath_out, magic_path) # copies to ispyb + + +# if __name__ == "__main__": +# client = Messenger("i15-1", broker="rabbitmq", username="guest", password="guest") + +# print("djsdnsj") + +# print(client.host) + +# client._send_message("/topic/public.worker.event", "fff") diff --git a/src/xrpd_toolbox/utils/mythen_utils.py b/src/xrpd_toolbox/utils/mythen_utils.py new file mode 100644 index 0000000..c11c0a5 --- /dev/null +++ b/src/xrpd_toolbox/utils/mythen_utils.py @@ -0,0 +1,185 @@ +from collections.abc import Iterable +from pathlib import Path + +import numpy as np +import numpy.typing as npt + +# def channel_to_angle(ich, off, r, c, dir=1, p=0.05): +# """ +# ich: channel number, 0-1280 +# off: module offset, degrees +# r: radius, mm +# c: center (in pixel or mm?) +# dir: direction, 1 +# p: pixel size, mm +# """ +# # print(off) +# if r < 0: +# ich = 1279 - ich +# return off + np.degrees( +# c * p / np.abs(r) - dir * np.arctan(p * (ich - c) / np.abs(r)) +# ) + +# def angle_to_channel(ang, off, r, c, dir=1, p=0.05): +# ich = ( +# np.tan(dir * (np.radians(ang - off) - c * p / np.abs(r))) * np.abs(r) / p +# + c +# ) +# if r > 0: +# return ich +# else: +# return 1279 - ich + + +def channel_to_angle( + pixel_number: npt.NDArray[np.int_], + centre: int | float, + conv: int | float, + module_offset: int | float, + zero_offset: int | float, +) -> np.ndarray: + module_conversions = pixel_number - centre + module_conversions = module_conversions * conv + module_conversions = np.arctan(module_conversions) + raw_tth = module_offset + np.rad2deg(module_conversions) + zero_offset + + return raw_tth + + +def channel_to_angle_in_real_units( + pixel_number: npt.NDArray[np.int_], + centre: int | float, + offset: int | float, + beamline_offset: int | float, + radius: int | float = 762, + p: float = 0.05, +) -> np.ndarray: + """ + pixel_number: channel number, usually 0-1280 + centre: centre (in pixel number - ie 1280/2) + offset: module offset, degrees + radius: radius, mm - approx 760 + direction: 1 or -1 depending if module is flipped or not + p: pixel size, mm = 0.05 + """ + + raw_tth = channel_to_angle( + pixel_number, centre, (p / radius), offset, beamline_offset + ) + + return raw_tth + + +def calc_intial_module_conv(conv=6.5e-05) -> dict[int, float]: + module_conv_dict = {} + + for mod in range(28): + if mod > 13: + module_conv_dict[mod] = -conv + else: + module_conv_dict[mod] = conv + + return module_conv_dict + + +def paired_modules(): + """ + Given a list of module numbers, return a list of (a, b) pairs such that + a and b are paired as described: 0-27, 1-26, 2-25, ..., 13-14. + Only pairs where both a and b are in the input list are returned. + """ + + modules = list(range(28)) + + modules = np.array(modules) + n = modules.max() + pairs = [] + for m in modules: + pair = n - m + if pair in modules and m <= pair: + pairs.append((int(m), int(pair))) + + pairs = np.array(pairs) + + return pairs + + +def find_pair(mod: int): + modules_array = paired_modules() + + row, col = np.where(modules_array == mod) + if len(row) == 0: + return None # value not found + return modules_array[row[0], 1 - col[0]] + + +def calc_starting_module_offset(initial_module=0.45, offset=2.5) -> dict[int, float]: + """Used for calculatign the intial centres of each of the modules""" + + module_pairs = paired_modules() + module_offsets_dict = {} + + for n, module_pair in enumerate(module_pairs[::-1]): + print(module_pair) + + ring_2_cen = (n * 5) + initial_module + ring_1_cen = ring_2_cen + offset + + module_offsets_dict[int(module_pair[1])] = ring_2_cen + module_offsets_dict[int(module_pair[0])] = ring_1_cen + + print(module_offsets_dict) + + return module_offsets_dict + + +def calc_starting_module_centre(initial_module=0.45, offset=2.5): + """Used for calculatign the intial centres of each of the modules""" + + module_pairs = paired_modules() + module_centres_dict = {} + + for n, module_pair in enumerate(module_pairs[::-1]): + print(module_pair) + + ring_2_cen = (n * 5) + initial_module + ring_1_cen = ring_2_cen + offset + + module_centres_dict[int(module_pair[1])] = ring_2_cen + module_centres_dict[int(module_pair[0])] = ring_1_cen + + print(module_centres_dict) + + return module_centres_dict + + +def read_config(mythen3_config_filepath: str | Path) -> list[int]: + """ + reads the config file used by SLSDet and works out what modules are currently active + """ + + enabled_modules_hostnames = [] + + with open(mythen3_config_filepath) as file: + lines = [line.rstrip() for line in file] + + for _, line in enumerate(lines): + if line.startswith("hostname"): + enabled_modules_hostnames = line.split()[1::] + + enabled_modules = [ + int(n_mod.rstrip()[-3::]) - 100 for n_mod in enabled_modules_hostnames + ] + + return enabled_modules + + +def modules_to_pixels(modules: int | Iterable[int]): + if isinstance(modules, int): + pixels = slice(modules * 1280, (modules + 1) * 1280, None) + elif isinstance(modules, Iterable): + pixels = np.concatenate([np.arange(i * 1280, (i + 1) * 1280) for i in modules]) + else: + raise TypeError("Must be int or iterable of ints") + + return pixels diff --git a/src/xrpd_toolbox/utils/unit_conversion.py b/src/xrpd_toolbox/utils/unit_conversion.py new file mode 100644 index 0000000..04e3b18 --- /dev/null +++ b/src/xrpd_toolbox/utils/unit_conversion.py @@ -0,0 +1,134 @@ +import math +from collections.abc import Iterable +from typing import Literal + +import numpy as np + +# from numba import njit + +# constants +ev_to_j = 1.602176634e-19 # electron volt to joule factor +h_planck = 6.62607015e-34 # Planck's constant +c_speed_of_light = 299792458.0 # m/s + + +def beam_energy_to_wavelength( + beam_energy: float | int, + unit: Literal["keV", "eV", "kev", "ev"] = "kev", +) -> float: + """ + + Calculates wavelength (Angstrom) from beam energy in kev. + + To allow convertion of tth to Q space, using the energy of the beam. beam energy is + converted to wavlength because it's better + + """ + if unit.lower() == "kev": + beam_energy_ev = beam_energy * 1000 + else: + beam_energy_ev = beam_energy + + beam_energy_j = beam_energy_ev * ev_to_j + wavelength_m = (h_planck * c_speed_of_light) / (beam_energy_j) + wavelength = wavelength_m * 1e10 + + return wavelength + + +def wavelength_to_beam_energy( + wavelength: float | int, + unit: Literal["keV", "eV", "kev", "ev"] = "kev", +) -> float: + """ + Calculates beam energy from wavelength (Angstrom). + + Converts wavelength to energy using E = hc / λ. + Returns energy in keV or eV depending on `unit`. + """ + + # convert Å → m + wavelength_m = wavelength * 1e-10 + + # energy in joules + beam_energy_j = (h_planck * c_speed_of_light) / wavelength_m + + # convert J → eV + beam_energy_ev = beam_energy_j / ev_to_j + + if unit.lower() == "kev": + return beam_energy_ev / 1000 + else: + return beam_energy_ev + + +def two_theta_to_q( + tth: Iterable[int | float] | int | float, wavelength: float +) -> np.ndarray: + """ + + Converts a 2th angle to Q using the wavelength. Simple. + + Whatever unit wavelength is in, will be the unit of Q. + + https://www.ill.eu/fileadmin/user_upload/ILL/3_Users/Support_labs_infrastructure/Software-tools/DIF_tools/neutrons.html + + """ + + tth_array = np.array(tth, dtype=float) + q_space = (4 * math.pi / wavelength) * np.sin(np.deg2rad(tth_array) / 2) + + return q_space + + +def d_to_two_theta( + d_spacing: np.ndarray | float | int, wavelength: float | int, degrees: bool = True +) -> np.ndarray: + """convertts d to tth - simples + sinθ=2dnλ​ + """ + + sintheta = wavelength / (2 * d_spacing) + theta = np.arcsin(sintheta) + two_theta = 2 * theta + + if degrees: + two_theta = np.degrees(two_theta) + + return two_theta + + +# @njit() +def q_space_to_theta(q: np.ndarray | float | int, wavelength: int | float): + return np.arcsin(q * wavelength / (4 * np.pi)) + + +def q_space_to_d(q: np.ndarray | float | int): + return 2 * np.pi / q + + +def q2_to_d(q2: np.ndarray | float | int): + """q2 = scattering vector squared to d-space""" + + d = 2 * np.pi / np.sqrt(q2) + + return d + + +def d_spacing_to_scattering_vector(d_spacing: np.ndarray) -> np.ndarray: + scattering_vector = 1 / (2 * d_spacing) + return scattering_vector + + +def d_to_tof(d: float | np.ndarray, difa: float, difc: float, tzero: float = 0.0): + """This is for TOF neutron data""" + + tof = difc * d + difa * d**2 + tzero + + return tof + + +# @njit() +def q_space_to_s(q: np.ndarray) -> np.ndarray: + s = q / (4 * np.pi) + return s diff --git a/src/xrpd_toolbox/utils/utils.py b/src/xrpd_toolbox/utils/utils.py index c34c73a..7fe0d4e 100644 --- a/src/xrpd_toolbox/utils/utils.py +++ b/src/xrpd_toolbox/utils/utils.py @@ -1,15 +1,568 @@ -from _collections_abc import Iterable +import json +import os +import re +from collections import defaultdict +from collections.abc import Iterable, Sequence +from datetime import datetime +from functools import wraps +from pathlib import Path +from time import time +import h5py import numpy as np +from h5py import Dataset, File +from pyFAI.calibrant import get_calibrant +from scipy.interpolate import interp1d -def normalise_to(data: Iterable[float | int], minval: float | int = 0) -> np.ndarray: +# TODO: Decide whether we can just use the normal logging within python +class AnalysisLogger: + """A class that can be use as a logger to log data to a + filepath and print at the same time - possibly superfluous""" + + def __init__(self, log_filepath: str | Path, logging: bool = False): + self.log_filepath = log_filepath + self.logging = logging + + if not os.path.exists(self.log_filepath): + os.makedirs(os.path.dirname(self.log_filepath), exist_ok=True) + elif os.path.exists(self.log_filepath) and ( + os.path.getsize(self.log_filepath) > 1e7 + ): + os.remove(self.log_filepath) + with open(self.log_filepath, "a+") as f: + f.write("Log File for I11 Data Reduction\n") + + with open(self.log_filepath, "a+") as f: + f.write("================================\n") + f.write(f"Datetime: {datetime.now()}\n") + f.write("================================\n") + + def log(self, *args, print_to_console: bool = True): + if print_to_console: + print(*args) + + if self.logging: + with open(self.log_filepath, "a") as f: + [f.write(str(m)) for m in args] + f.write("\n") + + +class NexusDatasetMapper: + def __init__(self, filepath: str | Path): + self.filepath = str(filepath) + self._mapping = defaultdict(list) + self._build_mapping() + + def _build_mapping(self): + """Scan file once and build dataset name → path mapping.""" + with h5py.File(self.filepath, "r") as f: + + def visitor(name, obj): + if isinstance(obj, h5py.Dataset): + dataset_name = name.split("/")[-1] + self._mapping[dataset_name].append(f"/{name}") + + f.visititems(visitor) + + def find(self, dataset_name): + """ + Returns: + - None if not found + - Single string if exactly one match + - List of paths if multiple matches + """ + matches = self._mapping.get(dataset_name) + if not matches: + return None + if len(matches) == 1: + return matches[0] + return matches + + def get(self, dataset_name, index=0): + """ + Lazily open the file and return the h5py.Dataset object. + + NOTE: + The returned dataset is only valid while the file is open. + Use within a context manager. + """ + paths = self._mapping.get(dataset_name) + if not paths: + raise KeyError(f"Dataset '{dataset_name}' not found.") + + path = paths[index] + + f = h5py.File(self.filepath, "r") + return f[path] # lazy dataset handle + + def keys(self): + return list(self._mapping.keys()) + + def items(self): + return dict(self._mapping) + + +def h5_to_array(file_path: str | Path, data_path: str) -> np.ndarray: + with File(file_path, "r") as file: + data = file.get(data_path) + if (data is not None) and isinstance(data, Dataset): + return np.asarray(data) + else: + raise ValueError(f"Data is None at {data_path} in {file_path}") + + +def get_entry(nexus_filepath: str | Path) -> str: + with File(nexus_filepath, "r") as file: + return list(file.keys())[0] + + +def dict_to_json(dict_to_save: dict, filepath: str | Path): + with open(filepath, "w") as file: + json.dump(dict_to_save, file, indent=4) + + +def nexus_file_match(str_to_match, beamline: str = "i15-1"): + return re.match(f"{beamline}" + r"-+[0-9]+\.nxs", str_to_match) + + +def get_nexus_files( + instrument_session_folder: str | Path, + beamline: str = "i15-1", + exclude: str = "processed", +) -> list[str]: + """Get all final data files ending with .nxs in some folder""" + + nexus_files = [ + os.path.join(str(instrument_session_folder), f) + for f in os.listdir(instrument_session_folder) + if nexus_file_match(f, beamline) and (exclude not in f) + ] + nexus_files.sort() + + return nexus_files + + +def get_filenumber_from_nxs(nexus_filepath: str | Path) -> int: + basename = os.path.basename(str(nexus_filepath)) + filenumber_str = re.findall(r"\d+", basename)[-1] + return int(filenumber_str) + + +def get_folder_paths(root_folder: str | Path) -> list[str]: + """get all folder directories within another folder""" + + instrument_session_folders = [ + os.path.join(root_folder, f) for f in os.listdir(root_folder) + ] + instrument_session_folders.sort() + + return instrument_session_folders + + +def copy_datapath_to_nexus( + source_file: str | Path, + destination_file: str | Path, + source_path: str, + destination_path: str, +) -> None: + """ + Copy a detector group from a source NeXus file to a destination NeXus file. + Overwrites the destination path if it already exists. + """ + + with h5py.File(source_file, "r") as src, h5py.File(destination_file, "a") as dst: + if source_path not in src: + raise KeyError(f"Source path not found: {source_path}") + + # Remove destination path if it exists (overwrite behavior) + if destination_path in dst: + del dst[destination_path] + + # Ensure parent group exists + parent_path = destination_path.rsplit("/", 1)[0] + dst.require_group(parent_path) + + # Copy the group recursively + src.copy(source_path, dst, destination_path) + + +def normalise_to( + data: Iterable[float | int], + minval: float | int = 0, +) -> np.ndarray: """ normalises an array - minval is the minimum value that the + minval is the minimum value that the processed array is scaled to. """ data_array = np.array(data, dtype=float) return (data_array - minval) / (np.amax(data_array) - minval) + + +def normalise(data: np.ndarray | list, default_min: float = 1e-12) -> np.ndarray: + """Normalises an array between 0 and 1, a specific version of normalise_to + where minval is min(data)""" + + # Do not make this use normalise_to it keeps breaking for some reason + + array_min = float(np.amin(data)) + if array_min == 0.0: + array_min = default_min + + return (data - np.min(data)) / (np.max(data) - array_min) + + +def load_int_array_from_file(filepath: str | Path) -> np.ndarray: + """ + File format is just a list of integers in a text file, one integer per line. + + If no file, will raise + + If empty file, will return no empty array. + + """ + + if not os.path.exists(filepath): + raise FileNotFoundError(f"{filepath} does not exist") + elif os.path.getsize(filepath) == 0: + return np.array([]) + else: + return np.loadtxt(filepath, dtype=np.int64, comments="#", usecols=0, ndmin=1) + + +def create_bins( + x: np.ndarray, rebin_step: float | int +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Create uniform bins for x, returning: + - bin_edges: the edges of the bins + - bin_centers: center of each bin + - indices: which bin each x belongs to + """ + bin_edges = np.arange(x.min(), x.max() + rebin_step, rebin_step) + bin_centers = 0.5 * (bin_edges[:-1] + bin_edges[1:]) + indices = np.digitize(x, bin_edges) - 1 # 0-based + return bin_centers, bin_edges, indices + + +def bin_and_propagate_errors( + x: np.ndarray, + y: np.ndarray, + e: np.ndarray, + rebin_step: float | int, + error_calc: str = "max", +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Rebin diffraction data with overlap-corrected averaging. + + sum_counts=False: + return the average diffraction pattern + + sum_counts=True: + return the pattern scaled by the effective number of detector steps + """ + # --- Validation --- + if not (x.ndim == y.ndim == e.ndim == 1): + raise ValueError("x, y, and e must be 1D arrays") + if not (x.shape == y.shape == e.shape): + raise ValueError("x, y, and e must have the same length") + + # --- Bin definition --- + bin_centres, bin_edges, _ = create_bins(x, rebin_step) + + # Prevent last point from falling exactly on the final bin edge + if x[-1] == bin_edges[-1]: + x = x.copy() + x[-1] -= rebin_step / 10_000 + + # --- Bin statistics --- + + y_sums, _ = np.histogram(x, bins=bin_edges, weights=y) + y2_sums, _ = np.histogram(x, bins=bin_edges, weights=y**2) + e2_sums, _ = np.histogram(x, bins=bin_edges, weights=e**2) + bin_counts, _ = np.histogram(x, bins=bin_edges) + + # # Effective scaling factor (heuristic) + # scale_factpr = scale or np.max(bin_counts) - np.median(bin_counts) + + with np.errstate(divide="ignore", invalid="ignore"): + intensity = y_sums / bin_counts + + # --- Errors --- + # Internal (propagated) error + prop_errors = np.sqrt(e2_sums) / bin_counts + + # External (sample) error with Bessel correction + variance = (y2_sums - bin_counts * intensity**2) / (bin_counts - 1) + std_errors = np.sqrt(variance) + + if error_calc == "poisson": + errors = prop_errors + elif error_calc == "std_dev": + # Invalidate bins with <2 points for external error + std_errors[bin_counts < 2] = np.nan + errors = std_errors + elif error_calc == "max": + std_errors[bin_counts < 2] = 0 + errors = np.maximum(prop_errors, std_errors) + else: + raise ValueError(f"Invalid error_calc: {error_calc}") + + ##remove NaN's - bins without counts + nan_mask = np.isnan(intensity) + nan_index = np.where(nan_mask)[0] + + bin_centres = np.delete(bin_centres, nan_index) + intensity = np.delete(intensity, nan_index) + errors = np.delete(errors, nan_index) + + return bin_centres, intensity, errors + + +def bin_and_propagate_errors_norm( + x: np.ndarray, + y: np.ndarray, + e: np.ndarray, + rebin_step: float | int, + error_calc: str = "max", + weighting: None | np.ndarray = None, +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Rebin diffraction data with overlap-corrected averaging. + + sum_counts=False: + return the average diffraction pattern + + sum_counts=True: + return the pattern scaled by the effective number of detector steps + """ + # --- Validation --- + if not (x.ndim == y.ndim == e.ndim == 1): + raise ValueError("x, y, and e must be 1D arrays") + if not (x.shape == y.shape == e.shape): + raise ValueError("x, y, and e must have the same length") + + # --- Bin definition --- + bin_centres, bin_edges, _ = create_bins(x, rebin_step) + + # Prevent last point from falling exactly on the final bin edge + if x[-1] == bin_edges[-1]: + x = x.copy() + x[-1] -= rebin_step / 1e3 + + # --- Bin statistics --- + + y_sums, _ = np.histogram(x, bins=bin_edges, weights=y) + y2_sums, _ = np.histogram(x, bins=bin_edges, weights=y**2) + e2_sums, _ = np.histogram(x, bins=bin_edges, weights=e**2) + bin_counts, _ = np.histogram(x, bins=bin_edges) + + # # Effective scaling factor (heuristic) + # scale_factpr = scale or np.max(bin_counts) - np.median(bin_counts) + + with np.errstate(divide="ignore", invalid="ignore"): + intensity = y_sums + + # --- Errors --- + # Internal (propagated) error + prop_errors = np.sqrt(e2_sums) + + # External (sample) error with Bessel correction + variance = (y2_sums - bin_counts * intensity**2) / (bin_counts - 1) + std_errors = np.sqrt(variance) + + if error_calc == "poisson": + errors = prop_errors + elif error_calc == "std_dev": + # Invalidate bins with <2 points for external error + std_errors[bin_counts < 2] = np.nan + errors = std_errors + elif error_calc == "max": + std_errors[bin_counts < 2] = 0 + errors = np.maximum(prop_errors, std_errors) + else: + raise ValueError(f"Invalid error_calc: {error_calc}") + + ##remove NaN's - bins without counts + nan_mask = np.isnan(intensity) + nan_index = np.where(nan_mask)[0] + + bin_centres = np.delete(bin_centres, nan_index) + intensity = np.delete(intensity, nan_index) + errors = np.delete(errors, nan_index) + + if weighting is not None: + w_sums, _ = np.histogram(x, bins=bin_edges, weights=weighting) + scale = np.delete(w_sums, nan_index) + + intensity = intensity / scale + errors = errors / scale + + return bin_centres, intensity, errors + + +def save_to_xye(xye_filepath_out, x: np.ndarray, y: np.ndarray, e: np.ndarray): + """Takes in 3 equal sized arrays and writes them to a typical XRPD csv/xye file""" + xye_out_data = np.stack((x, y, e), axis=-1) + np.savetxt(xye_filepath_out, xye_out_data, fmt="%.6f", delimiter=" ", newline="\n") + + +def save_data_to_h5(filepath: str | Path, dataset_path: str, data: np.ndarray) -> None: + group_path, name = dataset_path.rsplit("/", 1) + + with File(filepath, "a") as file: + if dataset_path in file: + del file[dataset_path] + + group = file.require_group(group_path) + group.create_dataset(name, data=data, compression="gzip", compression_opts=4) + + +def get_calibrant_peaks(calibrant_name: str, wavelength_in_ang: float): + calibrant = get_calibrant(calibrant_name) + calibrant.wavelength = wavelength_in_ang / 1e10 + observed_reflections_in_tth = calibrant.get_peaks("2th_deg") + + return observed_reflections_in_tth + + +def rebin_together(x1, y1, x2, y2, num_points=None): + # 1. Define overlapping x-range + xmin = max(x1.min(), x2.min()) + xmax = min(x1.max(), x2.max()) + + # 2. Decide number of points + if num_points is None: + num_points = min(len(x1), len(x2)) + + # 3. Create common evenly spaced grid + x_common = np.linspace(xmin, xmax, num_points) + + # 4. Interpolate both datasets + f1 = interp1d(x1, y1, kind="linear", bounds_error=False, fill_value="extrapolate") # type: ignore + f2 = interp1d(x2, y2, kind="linear", bounds_error=False, fill_value="extrapolate") # type: ignore + + y1_interp = f1(x_common) + y2_interp = f2(x_common) + + return x_common, y1_interp, y2_interp + + +def timeit(f): + """use this as a decorator to time a function + + eg: + + @timeit + def my_func() + time.sleep(1) + + myfunc() + + - my_func took 1 seconds + + """ + + @wraps(f) + def wrap(*args, **kw): + ts = time() + result = f(*args, **kw) + te = time() + duration = te - ts + print(f"{f.__name__} took {duration} seconds") + return result + + return wrap + + +def parse_numbers_with_error( + data: Sequence[str] | str | np.ndarray, +) -> tuple[np.ndarray, np.ndarray]: + """Takes a str or list of str in the format 1.234(5) + and returns two arrays: one with the numbers and one with the errors. + ie 1.234(5) -> 1.234, 0.005""" + + arr = np.atleast_1d(np.array(data, dtype=str)) + arr = np.char.replace(arr, " ", "") + + # Split number and optional error + num_str = np.char.partition(arr, "(")[:, 0] + err_str = np.char.strip(np.char.partition(arr, "(")[:, 2], ")") + err_str[err_str == ""] = "0" + + numbers = num_str.astype(float) + + # Compute decimal places safely as float + decimals = np.where( + np.char.find(num_str, ".") == -1, + 0, + np.char.str_len(num_str) - np.char.find(num_str, ".") - 1, + ) + errors = err_str.astype(float) * 10.0 ** (-decimals.astype(float)) + + if isinstance(data, str): + return numbers[0], errors[0] + else: + return numbers, errors + + +def cluster_points_auto( + x: np.ndarray, + y: np.ndarray, + y_tol: float | None = None, + x_gap: float | None = None, +): + """ + Groups points based on: + - Similar Y values (anchored to first point in group) + - Local continuity in X + + Returns: + labels: continuous group labels ordered left → right by X + n_groups: number of groups + """ + + x = np.asarray(x) + y = np.asarray(y) + + if y_tol is None: + y_tol = (y.max() - y.min()) / 20 + + if x_gap is None: + x_gap = (x.max() - x.min()) / 5 + + # IMPORTANT: sort by X first to enforce ordering consistency + order = np.argsort(x) + x_sorted = x[order] + y_sorted = y[order] + + n = len(x) + labels_sorted = np.full(n, -1, dtype=int) + + n_groups = 0 + start = 0 + + while start < n: + end = start + 1 + + while end < n: + y_diff = abs(y_sorted[end] - y_sorted[start]) + x_diff = abs(x_sorted[end] - x_sorted[end - 1]) + + if y_diff <= y_tol and x_diff <= x_gap: + end += 1 + else: + break + + labels_sorted[start:end] = n_groups + n_groups += 1 + start = end + + # map back to original order + labels = np.empty(n, dtype=int) + labels[order] = labels_sorted + + return labels, n_groups diff --git a/tests/test_core.py b/tests/test_core.py new file mode 100644 index 0000000..7cb6ac2 --- /dev/null +++ b/tests/test_core.py @@ -0,0 +1,236 @@ +from pathlib import Path + +import numpy as np +import pytest + +from xrpd_toolbox.core import ( + Parameter, + ParameterArray, + ScatteringData, + XRPDBaseModel, + XYEData, + evaluate_expression, + safe_exp, + safe_pow, + to_ndarray, +) +from xrpd_toolbox.fit_engine.fitting_core import RefinementBaseModel, is_parameter_like + + +def test_to_ndarray_converts_lists_and_preserves_ndarrays(): + source = [1, 2, 3] + result = to_ndarray(source) + assert isinstance(result, np.ndarray) + assert np.array_equal(result, np.array([1, 2, 3])) + + arr = np.array([4.0, 5.0]) + assert to_ndarray(arr) is arr + assert to_ndarray(7) == 7 + + +def test_safe_pow_and_safe_exp_valid_and_invalid(): + assert safe_pow(2, 3) == 8 + assert safe_pow(5, 0) == 1 + + with pytest.raises(ValueError, match="too large"): + safe_pow(1e7, 1) + + assert safe_exp(2) == pytest.approx(np.exp(2.0)) + with pytest.raises(ValueError, match="exp too large"): + safe_exp(701) + + +def test_evaluate_expression_uses_safe_globals_and_rejects_bad_input(): + assert evaluate_expression("x * 2 + sin(y)", {"x": 3.0, "y": 0.0}) == 6.0 + assert evaluate_expression("pow(2, 3)", {}) == 8.0 + + with pytest.raises(ValueError): + evaluate_expression("__import__('os')", {}) + + with pytest.raises(ValueError): + evaluate_expression("x.__class__", {"x": 1}) + + with pytest.raises(ValueError): + evaluate_expression("a" * 201, {}) + + +class ParameterModel(RefinementBaseModel): + a: Parameter = Parameter(value=3) + b: Parameter = Parameter(value="a + 2") + + +def test_parameter_string_expression_with_model_context(): + model = ParameterModel() + model.b._ctx = lambda: {"a": float(model.a)} + model.b._name = "b" + + assert float(model.a) == 3.0 + assert float(model.b) == 5.0 + + assert model.a == 3 + assert model.a < 4 + assert model.a <= 3 + assert model.a > 2 + + +def test_parameter_arithmetic_returns_raw_numbers_when_possible(): + a = Parameter(value=3) + assert a + 2 == 5 + + +def test_is_parameter_like_detects_parameter_in_union_annotations(): + assert is_parameter_like(Parameter | float) + assert not is_parameter_like(float) + + +def test_parameter_array_serialisation_and_indexing(): + array = ParameterArray.from_array([1, 2, 3], refine=False) + assert isinstance(array, ParameterArray) + assert np.array_equal(array.__array__(), np.array([1.0, 2.0, 3.0])) + first_item = array[1] + assert isinstance(first_item, Parameter) + assert first_item.value == 2 + assert isinstance(array[1:2], ParameterArray) + serialised = array.serialize() + assert serialised["value"] == [1, 2, 3] + assert serialised["refine"] == [False, False, False] + + loaded = ParameterArray.model_validate( + { + "value": [4, 5], + "refine": [True, False], + "lower_bounds": [-np.inf, -np.inf], + "upper_bounds": [np.inf, np.inf], + } + ) + assert isinstance(loaded, ParameterArray) + first_item = loaded[0] + assert isinstance(first_item, Parameter) + assert first_item.value == 4 + second_item = loaded[1] + assert isinstance(second_item, Parameter) + assert second_item.refine is False + + +class SimpleXRPDModel(XRPDBaseModel): + x: int + y: str + + +def test_xrpd_base_model_save_load(tmp_path: Path): + model = SimpleXRPDModel(x=1, y="hello") + + json_path = tmp_path / "model.json" + model.save_to_json(json_path) + loaded_json = SimpleXRPDModel.load_from_json(json_path) + assert loaded_json == model + + toml_path = tmp_path / "model.toml" + model.save_to_toml(toml_path) + loaded_toml = SimpleXRPDModel.load_from_toml(toml_path) + assert loaded_toml == model + + yaml_path = tmp_path / "model.yaml" + model.save_to_yaml(yaml_path) + loaded_yaml = SimpleXRPDModel.load_from_yaml(yaml_path) + assert loaded_yaml == model + + with pytest.raises(ValueError): + model.save_to_json(tmp_path / "bad.txt") + + with pytest.raises(ValueError): + SimpleXRPDModel.load(tmp_path / "bad.txt") + + +def test_xrpd_base_model_get_set_item(): + model = SimpleXRPDModel(x=2, y="world") + assert model["x"] == 2 + model["x"] = 5 + assert model.x == 5 + with pytest.raises(ValueError): + _ = model["missing"] + + +class NestedRefinementModel(RefinementBaseModel): + c: Parameter = Parameter(value=3) + + +class RefinementModelUnderTest(RefinementBaseModel): + a: Parameter | float = 1.5 + b: Parameter = Parameter(value=2) + nested: NestedRefinementModel = NestedRefinementModel() + + +def test_refinement_base_model_parameterisation_and_iteration(): + model = RefinementModelUnderTest() + model.parameterise_all(refine=True) + + assert isinstance(model.a, Parameter) + assert model.a.refine is True + assert isinstance(model.b, Parameter) + assert isinstance(model.nested.c, Parameter) + + paths = {model.path_to_string(path) for path, _ in model.iter_parameters()} + assert "a" in paths + assert "b" in paths + assert "nested.c" in paths + + model.parameterise_all(refine=True) + model.refine_none() + assert model.a.refine is False + assert model.b.refine is False + assert model.nested.c.refine is False + + model.refine_all(keep_fixed=["b"]) + assert model.a.refine is True + assert model.b.refine is False + assert model.nested.c.refine is True + + params = model.get_refinement_parameters() + assert "a" in params + assert "nested.c" in params + + model.set_refinement_parameters({"a": 4.0, "nested.c": 6.0}) + assert float(model.a) == 4.0 + assert float(model.nested.c) == 6.0 + + assert model.get_param_by_path("a") is model.a + assert model.get_param_by_path("nested.c") is model.nested.c + + +def test_xyedata_from_csv(tmp_path: Path): + csv_file = tmp_path / "data.csv" + csv_file.write_text("1 2 0.1\n2 3 0.2\n") + + data = XYEData.from_csv(str(csv_file)) + assert data.e is not None + assert isinstance(data, XYEData) + assert np.array_equal(data.x, np.array([1.0, 2.0])) + assert np.array_equal(data.y, np.array([2.0, 3.0])) + assert np.array_equal(data.e, np.array([0.1, 0.2])) + assert data.source == str(csv_file) + + +def test_scattering_data_from_xye_and_fullprof(tmp_path: Path): + xye_file = tmp_path / "data.xye" + xye_file.write_text("1 2 0.1\n2 3 0.2\n") + + scattering = ScatteringData.from_xye( + str(xye_file), x_unit="tth", data_type="xray", wavelength=1.54 + ) + assert isinstance(scattering, ScatteringData) + assert scattering.x_unit == "tth" + assert scattering.data_type == "xray" + assert float(scattering.wavelength) == pytest.approx(1.54) + + fullprof_file = tmp_path / "data.dat" + fullprof_file.write_text("header\n1 2 0.1\n2 3 0.2\n") + + fullprof_data = ScatteringData.from_fullprof( + str(fullprof_file), x_unit="tth", data_type="xray", wavelength=2.0 + ) + assert isinstance(fullprof_data, ScatteringData) + assert fullprof_data.e is not None + assert np.array_equal(fullprof_data.x, np.array([1.0, 2.0])) + assert np.array_equal(fullprof_data.y, np.array([2.0, 3.0])) + assert np.array_equal(fullprof_data.e, np.array([0.1, 0.2])) diff --git a/tests/test_eiger.py b/tests/test_eiger.py new file mode 100644 index 0000000..a1fa8d1 --- /dev/null +++ b/tests/test_eiger.py @@ -0,0 +1,49 @@ +import numpy as np +import pytest + +from xrpd_toolbox.i15_1.eiger_500k import Eiger500K + +wavelength = 0.161699 + +poni = { + "dist": 0.7, + "poni1": 0.0, + "poni2": 0.1, + "rot1": 0.0, + "rot2": 0.0, + "rot3": 0.0, + "pixel1": 7.5e-5, + "pixel2": 7.5e-5, + "wavelength": wavelength / 1e10, +} + +eiger = Eiger500K(poni=poni) + + +def test_simulated_eiger(): + positions_in_tth = np.linspace(1, 20, 10) + + images, ais = eiger.simulate_data( + positions_in_tth=positions_in_tth, + calibrant_name="Si", + wavelength_in_ang=wavelength, + ) + + assert images[0].shape == (1024, 512) + assert np.any(images[0] > 0) + + +@pytest.mark.skip(reason="Produces interactive plot output") +def test_simulated_eiger_1d_scan(): + x, y = eiger.simulate_1d_pattern( + positions_in_tth=np.linspace(1, 50, 10), + calibrant_name="Si", + wavelength_in_ang=wavelength, + ) + + assert len(x) > 0 + assert len(y) == len(x) + + +if __name__ == "__main__": + eiger.test() diff --git a/tests/test_lattice.py b/tests/test_lattice.py new file mode 100644 index 0000000..bc55f76 --- /dev/null +++ b/tests/test_lattice.py @@ -0,0 +1,105 @@ +import numpy as np +import pytest + +from xrpd_toolbox.fit_engine.lattice import ( + CubicLattice, + HexagonalLattice, + Lattice, + MonoclinicLattice, + OrthorhombicLattice, + RhombohedralLattice, + TetragonalLattice, + TriclinicLattice, + TrigonalLattice, + crystal_lattice_factory, +) + + +def test_cubic_lattice(): + cl = CubicLattice(a=5) + params = cl.get_refinement_parameters() + params["a"] = 5.5 + cl.set_refinement_parameters(params) + + params = cl.get_refinement_parameters() + + assert params["a"] == 5.5 + + model_dict = cl.model_dump() + cl2 = Lattice(**model_dict) + + assert isinstance(cl2, Lattice) + + +def test_lattice_radian_conversions_and_matrix(): + lattice = Lattice(a=3.0, b=4.0, c=5.0, alpha=60.0, beta=70.0, gamma=80.0) + + assert np.isclose(lattice.alpha_radians, np.deg2rad(60.0)) + assert np.isclose(lattice.beta_radians, np.deg2rad(70.0)) + assert np.isclose(lattice.gamma_radians, np.deg2rad(80.0)) + + matrix = lattice.matrix + assert matrix.shape == (3, 3) + assert np.isclose(matrix[0, 0], 3.0) + assert matrix[1, 0] == pytest.approx(4.0 * np.cos(np.deg2rad(80.0))) + assert matrix[1, 1] == pytest.approx(4.0 * np.sin(np.deg2rad(80.0))) + assert matrix[2, 2] >= 0.0 + + +def test_special_lattice_equalities(): + ortho = OrthorhombicLattice(a=2.0, b=3.0, c=4.0) + assert ortho.alpha == 90 + assert ortho.beta == 90 + assert ortho.gamma == 90 + assert ortho.a == 2.0 + assert ortho.b == 3.0 + assert ortho.c == 4.0 + + tetragonal = TetragonalLattice(a=2.5, c=6.0) + assert tetragonal.a == tetragonal.b + assert tetragonal.alpha == 90 + assert tetragonal.gamma == 90 + + hexagonal = HexagonalLattice(a=2.0, c=5.0) + assert hexagonal.a == hexagonal.b + assert hexagonal.gamma == 120 + assert hexagonal.alpha == 90 + assert hexagonal.beta == 90 + + trigonal = TrigonalLattice(a=2.5, c=5.0) + assert trigonal.a == trigonal.b + assert trigonal.gamma == 120 + assert trigonal.alpha == 90 + assert trigonal.beta == 90 + + rhombo = RhombohedralLattice(a=4.0, alpha=100.0) + assert rhombo.a == rhombo.b == rhombo.c + assert rhombo.alpha == rhombo.beta == rhombo.gamma + + mono = MonoclinicLattice(a=3.0, b=4.0, c=5.0, beta=110.0) + assert mono.alpha == 90 + assert mono.gamma == 90 + assert mono.beta == 110.0 + + +@pytest.mark.parametrize( + "crystal_class,expected_type", + [ + ("cubic", CubicLattice), + ("hexagonal", HexagonalLattice), + ("monoclinic", MonoclinicLattice), + ("orthorhombic", OrthorhombicLattice), + ("rhombohedral", RhombohedralLattice), + ("tetragonal", TetragonalLattice), + ("trigonal", TrigonalLattice), + ("triclinic", TriclinicLattice), + ], +) +def test_crystal_lattice_factory_returns_expected_class(crystal_class, expected_type): + lattice_cls = crystal_lattice_factory(crystal_class.upper()) + assert lattice_cls is expected_type + + +def test_crystal_lattice_factory_raises_for_unknown_class(): + with pytest.raises(ValueError, match="unknown"): + crystal_lattice_factory("unknown-crystal") diff --git a/tests/test_mythen.py b/tests/test_mythen.py new file mode 100644 index 0000000..88069d8 --- /dev/null +++ b/tests/test_mythen.py @@ -0,0 +1,97 @@ +import os +from pathlib import Path + +import pytest + +from xrpd_toolbox.i11.mythen import MythenSettings + +CONFIG_FILE = ( + Path(__file__).parent.parent / "config" / "i11" / "mythen3_reduction_config.toml" +) + + +@pytest.fixture +def mythen_settings(): + mythen_settings = MythenSettings( + active_modules=[1, 2, 3], + bad_modules=[4, 5], + bad_channel_masking=True, + flatfield_filepath="flatfield.h5", + apply_flatfield=False, + modules_in_flatfield=[1, 2], + send_to_ispyb=False, + rebin_step=0.004, + default_counter=0, + edge_bad_channels=10, + error_calc="poisson", + data_reduction_mode="step_scan", + bad_channels_filepath="bad_channels.txt", + angcal_filepath="angcal.txt", + ) + + return mythen_settings + + +def test_mythen_settings(mythen_settings: MythenSettings): + assert mythen_settings.data_reduction_mode == "step_scan" + assert mythen_settings.rebin_step == 0.004 + + +def test_mythen_settings_load_from_toml(): + settings = MythenSettings.load_from_toml(CONFIG_FILE) + + assert isinstance(settings, MythenSettings) + + +def test_mythen_toml_save_load(mythen_settings: MythenSettings): + file_path = "file.toml" + + mythen_settings.save_to_toml(file_path) + loaded_mythen_settings = MythenSettings.load_from_toml(file_path) + + assert mythen_settings == loaded_mythen_settings + + os.remove(file_path) + + +def test_mythen_yaml_save_load(mythen_settings: MythenSettings): + file_path = "file.yaml" + + mythen_settings.save_to_yaml(file_path) + loaded_mythen_settings = MythenSettings.load_from_yaml(file_path) + + assert mythen_settings == loaded_mythen_settings + + os.remove(file_path) + + +def test_mythen_load_fails_when_incorrect_file_extension( + mythen_settings: MythenSettings, +): + file_path = "file.txt" + + with pytest.raises(ValueError): + mythen_settings.save_to_yaml(file_path) + + with pytest.raises(ValueError): + mythen_settings.save_to_toml(file_path) + + +# def test_mythen_data_loader(): +# pass + + +# def test_mythen_step_scan_process(): +# raise Exception("Not done") + + +# def test_mythen_flatefield_process(): +# raise Exception("Not done") + + +# def test_mythen_pump_probe_process(): +# raise Exception("Not done") + + +# def test_mythen_time_resolved_process(): +# raise Exception("Not done") diff --git a/tests/test_profile_calc.py b/tests/test_profile_calc.py new file mode 100644 index 0000000..b008337 --- /dev/null +++ b/tests/test_profile_calc.py @@ -0,0 +1,66 @@ +import os +from pathlib import Path + +import pytest + +from xrpd_toolbox.core import Parameter +from xrpd_toolbox.fit_engine.background import Background, LinearInterpolationBackground +from xrpd_toolbox.fit_engine.fitting_core import ScatteringData, refine_model +from xrpd_toolbox.fit_engine.profile_calculation import ReitveldRefinement, Structure +from xrpd_toolbox.utils.unit_conversion import beam_energy_to_wavelength + +# Paths relative to this test file +TEST_DIR = Path(__file__).parent +REPO_ROOT = TEST_DIR.parent +CIF_DIR = REPO_ROOT / "cifs" +TEST_DATA_DIR = TEST_DIR / "data" +OUTPUT_NAME = "test.yaml" + +# Data file - use test data directory +DATA_FILE = TEST_DATA_DIR / "1410696_summed_mythen3.xye" + + +@pytest.mark.skipif( + not DATA_FILE.exists(), + reason="Test data file not available (expected in local dev environment)", +) +def test_refine_silicon(): + si_cif = CIF_DIR / "Si.cif" + assert si_cif.exists(), f"CIF file not found: {si_cif}" + + si_structure = Structure.load_from_cif(si_cif) + + beam_energy = 15 + wavelength = beam_energy_to_wavelength(beam_energy) + + data = ScatteringData.from_xye( + str(DATA_FILE), + x_unit="tth", + data_type="xray", + wavelength=Parameter(value=wavelength, refine=False), + ) + + background = LinearInterpolationBackground.estimate(data.x, data.y) + + model = ReitveldRefinement(data=data, background=background, structure=si_structure) + + assert isinstance(model.background, Background) + model.background.refine_none() + + print(model.get_refinement_parameters()) + model.irf.refine_none() + model.refine(plot=False) + model.save(OUTPUT_NAME) + os.remove(OUTPUT_NAME) + + +@pytest.mark.skipif( + not Path(OUTPUT_NAME).exists(), + reason="Requires test_refine_silicon to run first", +) +def test_load_refinement_and_refine(): + loaded_refinement = ReitveldRefinement.load(OUTPUT_NAME) + + loaded_refinement.calculate_profile() + + refine_model(loaded_refinement) diff --git a/tests/test_sample_alignment.py b/tests/test_sample_alignment.py new file mode 100644 index 0000000..ed7a2e8 --- /dev/null +++ b/tests/test_sample_alignment.py @@ -0,0 +1,56 @@ +from pathlib import Path + +import pytest + +from xrpd_toolbox.fit_engine.background import ConstantBackground +from xrpd_toolbox.i15_1.sample_alignment import ( + SampleAligner, + run_sample_alignment, + sample_alignment_model_builder, +) + +REPO_ROOT = Path(__file__).resolve().parents[1] +SAMPLE_ALIGNMENT_DATA = ( + REPO_ROOT / "src" / "xrpd_toolbox" / "i15_1" / "sample_alignment_data" +) +TEST_FILE = SAMPLE_ALIGNMENT_DATA / "NIST_Si-95016.csv" + +EXPECTED_SAMPLE_ALIGNMENT_CENTRES = { + "GaIn-94521.csv": 70.02, + "HKUST1-95018.csv": 71.05, + "NIST_Si-95016.csv": 84.37, + "NaCl-95017.csv": 55.39, + "carbon_black-94519.csv": 36.77, + "water-94520.csv": 55.23, +} + + +def test_sample_alignment_builder_from_csv(): + model = sample_alignment_model_builder(str(TEST_FILE), peak_type="tophat") + + assert isinstance(model, SampleAligner) + assert isinstance(model.background, ConstantBackground) + assert model.data.x.shape == model.data.y.shape + assert model.data.x.shape[0] > 0 + assert len(model.sample_and_capillary) > 0 + + y_calc = model.calculate_profile() + assert y_calc.shape == model.data.x.shape + assert y_calc.dtype == model.data.x.dtype + + +@pytest.mark.parametrize( + "csv_file, expected_centre", + EXPECTED_SAMPLE_ALIGNMENT_CENTRES.items(), +) +def test_run_sample_alignment_returns_centered_model( + csv_file: Path, expected_centre: float +): + sample_file = SAMPLE_ALIGNMENT_DATA / csv_file + model = run_sample_alignment(str(sample_file)) + + assert isinstance(model, SampleAligner) + assert model.centre is not None + assert len(model.sample_and_capillary) > 0 + assert model.data.x.shape[0] > 0 + assert model.centre == pytest.approx(expected_centre, abs=2) diff --git a/tests/test_utils.py b/tests/test_utils.py index de69e74..5e1b793 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,7 +1,30 @@ +import os + import numpy as np +import pytest +import scipy.integrate as integrate + +from xrpd_toolbox.fit_engine.peaks import find_and_fit_peaks, gaussian +from xrpd_toolbox.utils.unit_conversion import beam_energy_to_wavelength, two_theta_to_q +from xrpd_toolbox.utils.utils import ( + get_filenumber_from_nxs, + get_folder_paths, + load_int_array_from_file, + nexus_file_match, + normalise, + normalise_to, +) + -from xrpd_toolbox.utils.energy import beam_energy_to_wavelength, tth_to_q -from xrpd_toolbox.utils.utils import normalise_to +def test_get_filenumber_from_nxs(): + filedir = "/dls/i11/test/cm12345-1/i11-99999.nxs" + assert get_filenumber_from_nxs(filedir) == 99999 + + +def test_nexus_file_match(): + filedir = "/dls/i15-1/test/cm12345-1/i15-1-99999.nxs" + filename = os.path.basename(filedir) + assert nexus_file_match(filename, beamline="i15-1") is not None def test_normalise_to(): @@ -9,12 +32,113 @@ def test_normalise_to(): assert np.array_equal(normalised_array, [0.25, 0.5, 1.0]) +def test_normalise(): + normalised_array = normalise([1, 2, 4]) + assert np.amax(normalised_array) == 1.0 + assert np.amin(normalised_array) == 0.0 + + +def test_gaussian(): + x = np.linspace(0, 10, 100) + y = gaussian(x, amplitude=22.0, centre=5.0, fwhm=1.0) + assert len(y) == len(x) + integral = integrate.simpson(y, x) + assert np.isclose(integral, 22.0, atol=0.5) + + def test_tth_to_q(): tth = 30 - q_in_angstrom = tth_to_q(tth, 1) + q_in_angstrom = two_theta_to_q(tth, 1) assert np.round(q_in_angstrom, 2) == 3.25 def test_beam_energy_to_wavelength(): wavelength_in_angstrom = beam_energy_to_wavelength(12.34, unit="kev") assert round(wavelength_in_angstrom, 2) == 1.0 + + +def test_load_int_array_from_file_returns_array_when_contains_ints(tmp_path): + test_file = tmp_path / "int_array.txt" + + # Create a temporary file + test_file.write_text("\n".join(str(i) for i in range(1, 6))) + + # Test loading the array + result = load_int_array_from_file(test_file) + expected = np.array([1, 2, 3, 4, 5]) + assert np.array_equal(result, expected) + + +def test_load_int_array_from_file_raises_when_file_doesnt_exist(): + test_file = "non_existent.txt" + + with pytest.raises(FileNotFoundError, match="does not exist"): + load_int_array_from_file(test_file) + + +def test_load_int_array_from_file_returns_empty_array_when_file_empty(tmp_path): + test_file = tmp_path / "int_array.txt" + + # Create a temporary empty file + test_file.write_text("") + + result = load_int_array_from_file(test_file) + expected = np.array([]) + assert np.array_equal(result, expected) + + # Create a temporary file + with open(test_file, "w") as f: + f.write("") + + # Test loading the array + result = load_int_array_from_file(test_file) + expected = np.array([]) + assert np.array_equal(result, expected) + + # Clean up + os.remove(test_file) + + +def test_get_folder_paths(): + list_of_paths = get_folder_paths("/") + + assert "/home" in list_of_paths + assert isinstance(list_of_paths, list) + + +def test_find_and_fit_peaks_with_one_peak(): + np.random.seed(0) # For reproducibility + x = np.linspace(0, 10, 100) + y = gaussian(x, amplitude=1.0, centre=5.0, fwhm=1.0) + + noise = np.random.normal(0, 0.02, size=y.shape) + y_noisy = y + noise + + peaks = find_and_fit_peaks(x, y_noisy) + assert np.isclose(peaks[0].centre, 5.0, atol=0.1) + + print(peaks) + + +def test_find_and_fit_peaks_with_n_peaks(): + np.random.seed(0) # For reproducibility + x = np.linspace(0, 100, 1000) + + y_intensity = np.zeros_like(x) + + for peak_cen in np.linspace(20, 80, 4): + peak_intensity = gaussian(x, amplitude=1.0, centre=peak_cen, fwhm=1.0) + y_intensity = y_intensity + peak_intensity + + noise = np.random.normal(0, 0.02, size=y_intensity.shape) + y_noisy = y_intensity + noise + + peaks = find_and_fit_peaks(x, y_noisy) + + assert len(peaks) == 4 + + assert np.allclose([float(p.centre) for p in peaks], [20, 40, 60, 80], atol=0.5) + + +if __name__ == "__main__": + test_find_and_fit_peaks_with_n_peaks() diff --git a/uv.lock b/uv.lock index 98c6a36..bb99e34 100644 --- a/uv.lock +++ b/uv.lock @@ -19,6 +19,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] +[[package]] +name = "anyio" +version = "4.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, +] + [[package]] name = "asteval" version = "1.0.8" @@ -28,6 +41,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/31/6cf181011dc738c33bf6ba7aea2e8e1d3c1f71b7dab1942f3054f66f6202/asteval-1.0.8-py3-none-any.whl", hash = "sha256:6c64385c6ff859a474953c124987c7ee8354d781c76509b2c598741c4d1d28e9", size = 22968, upload-time = "2025-12-17T20:56:07.457Z" }, ] +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, +] + +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, +] + +[[package]] +name = "bibtexparser" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/1c/577d3ce406e88f370e80a6ebf76ae52a2866521e0b585e8ec612759894f1/bibtexparser-1.4.4.tar.gz", hash = "sha256:093b6c824f7a71d3a748867c4057b71f77c55b8dbc07efc993b781771520d8fb", size = 55594, upload-time = "2026-01-29T18:58:01.366Z" } + [[package]] name = "cachetools" version = "7.0.6" @@ -37,6 +77,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fe/c4/cf76242a5da1410917107ff14551764aa405a5fd10cd10cf9a5ca8fa77f4/cachetools-7.0.6-py3-none-any.whl", hash = "sha256:4e94956cfdd3086f12042cdd29318f5ced3893014f7d0d059bf3ead3f85b7f8b", size = 13976, upload-time = "2026-04-20T19:02:21.187Z" }, ] +[[package]] +name = "certifi" +version = "2026.4.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" }, +] + [[package]] name = "cfgv" version = "3.5.0" @@ -46,6 +95,95 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -55,6 +193,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + [[package]] name = "contourpy" version = "1.3.3" @@ -274,6 +421,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] +[[package]] +name = "dans-diffraction" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/c1/23a07e0bb8edeaa50f85a5399dd10e7b002d5bab90a1cfc41461eb229825/dans_diffraction-3.4.0.tar.gz", hash = "sha256:d808af4db4dcc30ec0a6d10d7566cafd9a0c22913456e369166d9a267236ded7", size = 3605391, upload-time = "2025-09-15T20:09:06.203Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/92/b7bbffc01432c63ea79295686b42a4959dacb298e6f39a95029600acb73b/dans_diffraction-3.4.0-py3-none-any.whl", hash = "sha256:d19a522b37655970dfa9f0eaa1abbea6a20643c9b5473cb613d80d5362180746", size = 3698901, upload-time = "2025-09-15T20:09:03.806Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + [[package]] name = "dill" version = "0.4.1" @@ -292,6 +461,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, ] +[[package]] +name = "docopt-ng" +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/50/8d6806cf13138127692ae6ff79ddeb4e25eb3b0bcc3c1bd033e7e04531a9/docopt_ng-0.9.0.tar.gz", hash = "sha256:91c6da10b5bb6f2e9e25345829fb8278c78af019f6fc40887ad49b060483b1d7", size = 32264, upload-time = "2023-05-30T20:46:25.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/4a/c3b77fc1a24510b08918b43a473410c0168f6e657118807015f1f1edceea/docopt_ng-0.9.0-py3-none-any.whl", hash = "sha256:bfe4c8b03f9fca424c24ee0b4ffa84bf7391cb18c29ce0f6a8227a3b01b81ff9", size = 16689, upload-time = "2023-05-30T20:46:45.294Z" }, +] + [[package]] name = "dunamai" version = "1.26.1" @@ -304,6 +482,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/bc/8b8ec5a4bfc5b9cf3ce27a118339e994f88410be5677c96493e0ea28e76d/dunamai-1.26.1-py3-none-any.whl", hash = "sha256:2727d939c5b4257cb01ea404372803b477f5176e5a347c43beaf89cd5072e853", size = 27332, upload-time = "2026-04-04T14:07:10.079Z" }, ] +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + [[package]] name = "fabio" version = "2025.10.0" @@ -416,6 +603,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d5/08/c2409cb01d5368dcfedcbaffa7d044cc8957d57a9d0855244a5eb4709d30/funcy-2.0-py2.py3-none-any.whl", hash = "sha256:53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0", size = 30891, upload-time = "2023-03-28T06:22:42.576Z" }, ] +[[package]] +name = "gql" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "backoff" }, + { name = "graphql-core" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/9f/cf224a88ed71eb223b7aa0b9ff0aa10d7ecc9a4acdca2279eb046c26d5dc/gql-4.0.0.tar.gz", hash = "sha256:f22980844eb6a7c0266ffc70f111b9c7e7c7c13da38c3b439afc7eab3d7c9c8e", size = 215644, upload-time = "2025-08-17T14:32:35.397Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/94/30bbd09e8d45339fa77a48f5778d74d47e9242c11b3cd1093b3d994770a5/gql-4.0.0-py3-none-any.whl", hash = "sha256:f3beed7c531218eb24d97cb7df031b4a84fdb462f4a2beb86e2633d395937479", size = 89900, upload-time = "2025-08-17T14:32:34.029Z" }, +] + +[[package]] +name = "graphql-core" +version = "3.2.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/c5/36aa96205c3ecbb3d34c7c24189e4553c7ca2ebc7e1dd07432339b980272/graphql_core-3.2.8.tar.gz", hash = "sha256:015457da5d996c924ddf57a43f4e959b0b94fb695b85ed4c29446e508ed65cf3", size = 513181, upload-time = "2026-03-05T19:55:37.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/41/cb887d9afc5dabd78feefe6ccbaf83ff423c206a7a1b7aeeac05120b2125/graphql_core-3.2.8-py3-none-any.whl", hash = "sha256:cbee07bee1b3ed5e531723685369039f32ff815ef60166686e0162f540f1520c", size = 207349, upload-time = "2026-03-05T19:55:35.911Z" }, +] + [[package]] name = "h5py" version = "3.16.0" @@ -492,6 +703,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, ] +[[package]] +name = "idna" +version = "3.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" }, +] + [[package]] name = "iniconfig" version = "2.3.0" @@ -501,6 +721,69 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "ipython" +version = "9.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "psutil" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274, upload-time = "2026-04-24T12:24:53.038Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "ipywidgets" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "comm" }, + { name = "ipython" }, + { name = "jupyterlab-widgets" }, + { name = "traitlets" }, + { name = "widgetsnbextension" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/ae/c5ce1edc1afe042eadb445e95b0671b03cee61895264357956e61c0d2ac0/ipywidgets-8.1.8.tar.gz", hash = "sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668", size = 116739, upload-time = "2025-11-01T21:18:12.393Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/6d/0d9848617b9f753b87f214f1c682592f7ca42de085f564352f10f0843026/ipywidgets-8.1.8-py3-none-any.whl", hash = "sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e", size = 139808, upload-time = "2025-11-01T21:18:10.956Z" }, +] + +[[package]] +name = "jedi" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" }, +] + [[package]] name = "jinja2" version = "3.1.6" @@ -526,6 +809,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/b9/313e8f2f2e9517ae050a692ae7b3e4b3f17cc5e6dfea0db51fe14e586580/jinja2_ansible_filters-1.3.2-py3-none-any.whl", hash = "sha256:e1082f5564917649c76fed239117820610516ec10f87735d0338688800a55b34", size = 18975, upload-time = "2022-06-30T14:08:49.571Z" }, ] +[[package]] +name = "joblib" +version = "1.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/2d/ef58fed122b268c69c0aa099da20bc67657cdfb2e222688d5731bd5b971d/jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0", size = 897423, upload-time = "2025-11-01T21:11:29.724Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/b5/36c712098e6191d1b4e349304ef73a8d06aed77e56ceaac8c0a306c7bda1/jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8", size = 914926, upload-time = "2025-11-01T21:11:28.008Z" }, +] + [[package]] name = "kiwisolver" version = "1.5.0" @@ -632,6 +933,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/dd/8050c947d435c8d4bc94e3252f4d8bb8a76cfb424f043a8680be637a57f1/kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1", size = 73558, upload-time = "2026-03-09T13:15:52.112Z" }, ] +[[package]] +name = "llvmlite" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/0b/b9d1911cfefa61399821dfb37f486d83e0f42630a8d12f7194270c417002/llvmlite-0.47.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74090f0dcfd6f24ebbef3f21f11e38111c4d7e6919b54c4416e1e357c3446b07", size = 37232770, upload-time = "2026-03-31T18:28:26.765Z" }, + { url = "https://files.pythonhosted.org/packages/46/27/5799b020e4cdfb25a7c951c06a96397c135efcdc21b78d853bbd9c814c7d/llvmlite-0.47.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ca14f02e29134e837982497959a8e2193d6035235de1cb41a9cb2bd6da4eedbb", size = 56275177, upload-time = "2026-03-31T18:28:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/7e/51/48a53fedf01cb1f3f43ef200be17ebf83c8d9a04018d3783c1a226c342c2/llvmlite-0.47.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12a69d4bb05f402f30477e21eeabe81911e7c251cecb192bed82cd83c9db10d8", size = 55128631, upload-time = "2026-03-31T18:28:36.046Z" }, + { url = "https://files.pythonhosted.org/packages/a2/50/59227d06bdc96e23322713c381af4e77420949d8cd8a042c79e0043096cc/llvmlite-0.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:c37d6eb7aaabfa83ab9c2ff5b5cdb95a5e6830403937b2c588b7490724e05327", size = 38138400, upload-time = "2026-03-31T18:28:40.076Z" }, + { url = "https://files.pythonhosted.org/packages/fa/48/4b7fe0e34c169fa2f12532916133e0b219d2823b540733651b34fdac509a/llvmlite-0.47.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:306a265f408c259067257a732c8e159284334018b4083a9e35f67d19792b164f", size = 37232769, upload-time = "2026-03-31T18:28:43.735Z" }, + { url = "https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd", size = 56275178, upload-time = "2026-03-31T18:28:48.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/a3b4a543185305a9bdf3d9759d53646ed96e55e7dfd43f53e7a421b8fbae/llvmlite-0.47.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:003bcf7fa579e14db59c1a1e113f93ab8a06b56a4be31c7f08264d1d4072d077", size = 55128632, upload-time = "2026-03-31T18:28:52.901Z" }, + { url = "https://files.pythonhosted.org/packages/2f/f5/d281ae0f79378a5a91f308ea9fdb9f9cc068fddd09629edc0725a5a8fde1/llvmlite-0.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:f3079f25bdc24cd9d27c4b2b5e68f5f60c4fdb7e8ad5ee2b9b006007558f9df7", size = 38138692, upload-time = "2026-03-31T18:28:57.147Z" }, + { url = "https://files.pythonhosted.org/packages/77/6f/4615353e016799f80fa52ccb270a843c413b22361fadda2589b2922fb9b0/llvmlite-0.47.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a3c6a735d4e1041808434f9d440faa3d78d9b4af2ee64d05a66f351883b6ceec", size = 37232771, upload-time = "2026-03-31T18:29:01.324Z" }, + { url = "https://files.pythonhosted.org/packages/31/b8/69f5565f1a280d032525878a86511eebed0645818492feeb169dfb20ae8e/llvmlite-0.47.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2699a74321189e812d476a43d6d7f652f51811e7b5aad9d9bba842a1c7927acb", size = 56275178, upload-time = "2026-03-31T18:29:05.748Z" }, + { url = "https://files.pythonhosted.org/packages/d6/da/b32cafcb926fb0ce2aa25553bf32cb8764af31438f40e2481df08884c947/llvmlite-0.47.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c6951e2b29930227963e53ee152441f0e14be92e9d4231852102d986c761e40", size = 55128632, upload-time = "2026-03-31T18:29:11.235Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/4898b44e4042c60fafcb1162dfb7014f6f15b1ec19bf29cfea6bf26df90d/llvmlite-0.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2e9adf8698d813a9a5efb2d4370caf344dbc1e145019851fee6a6f319ba760e", size = 38138695, upload-time = "2026-03-31T18:29:15.43Z" }, + { url = "https://files.pythonhosted.org/packages/1c/d4/33c8af00f0bf6f552d74f3a054f648af2c5bc6bece97972f3bfadce4f5ec/llvmlite-0.47.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:de966c626c35c9dff5ae7bf12db25637738d0df83fc370cf793bc94d43d92d14", size = 37232773, upload-time = "2026-03-31T18:29:19.453Z" }, + { url = "https://files.pythonhosted.org/packages/64/1d/a760e993e0c0ba6db38d46b9f48f6c7dceb8ac838824997fb9e25f97bc04/llvmlite-0.47.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ddbccff2aeaff8670368340a158abefc032fe9b3ccf7d9c496639263d00151aa", size = 56275176, upload-time = "2026-03-31T18:29:24.149Z" }, + { url = "https://files.pythonhosted.org/packages/84/3b/e679bc3b29127182a7f4aa2d2e9e5bea42adb93fb840484147d59c236299/llvmlite-0.47.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4a7b778a2e144fc64468fb9bf509ac1226c9813a00b4d7afea5d988c4e22fca", size = 55128631, upload-time = "2026-03-31T18:29:29.536Z" }, + { url = "https://files.pythonhosted.org/packages/be/f7/19e2a09c62809c9e63bbd14ce71fb92c6ff7b7b3045741bb00c781efc3c9/llvmlite-0.47.0-cp314-cp314-win_amd64.whl", hash = "sha256:694e3c2cdc472ed2bd8bd4555ca002eec4310961dd58ef791d508f57b5cc4c94", size = 39153826, upload-time = "2026-03-31T18:29:33.681Z" }, + { url = "https://files.pythonhosted.org/packages/40/a1/581a8c707b5e80efdbbe1dd94527404d33fe50bceb71f39d5a7e11bd57b7/llvmlite-0.47.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:92ec8a169a20b473c1c54d4695e371bde36489fc1efa3688e11e99beba0abf9c", size = 37232772, upload-time = "2026-03-31T18:29:37.952Z" }, + { url = "https://files.pythonhosted.org/packages/11/03/16090dd6f74ba2b8b922276047f15962fbeea0a75d5601607edb301ba945/llvmlite-0.47.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa1cbd800edd3b20bc141521f7fd45a6185a5b84109aa6855134e81397ffe72b", size = 56275178, upload-time = "2026-03-31T18:29:42.58Z" }, + { url = "https://files.pythonhosted.org/packages/f5/cb/0abf1dd4c5286a95ffe0c1d8c67aec06b515894a0dd2ac97f5e27b82ab0b/llvmlite-0.47.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6725179b89f03b17dabe236ff3422cb8291b4c1bf40af152826dfd34e350ae8", size = 55128632, upload-time = "2026-03-31T18:29:46.939Z" }, + { url = "https://files.pythonhosted.org/packages/4f/79/d3bbab197e86e0ff4f9c07122895b66a3e0d024247fcff7f12c473cb36d9/llvmlite-0.47.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6842cf6f707ec4be3d985a385ad03f72b2d724439e118fcbe99b2929964f0453", size = 39153839, upload-time = "2026-03-31T18:29:51.004Z" }, +] + [[package]] name = "lmfit" version = "1.3.4" @@ -888,6 +1217,175 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/87/afead29192170917537934c6aff4b008c805fff7b1ccea0c79120d96beda/matplotlib-3.10.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3fc0364dfbe1d07f6d15c5ebd0c5bf89e126916e5a8667dd4a7a6e84c36653d4", size = 8774002, upload-time = "2026-04-24T00:14:09.816Z" }, ] +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[package]] +name = "monty" +version = "2026.2.18" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "ruamel-yaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/e2/e8ada0dbe679e4af4587e1d29b46e6c1febf2e861cb71ba09b2a6b3aed1a/monty-2026.2.18.tar.gz", hash = "sha256:e34e77abe7454ab84a9eeab7d909dbb500e3fa114c1849352ecd4570feb72be0", size = 191585, upload-time = "2026-02-18T01:19:02.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/af/d46382eef9338e01a9f6424884a127e1fbf9a13818b962edfa8a231830bb/monty-2026.2.18-py3-none-any.whl", hash = "sha256:fee3580ccc77431a4714455dc705a0bd6196c4350f4fca3771e5fa61638274ea", size = 52670, upload-time = "2026-02-18T01:19:01.079Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "narwhals" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/0e/3ad61eb87088cc4932e0d851531fa82f845a6230b68b091a0e298cc7e537/narwhals-2.21.0.tar.gz", hash = "sha256:7c6e7f50528e62b7a967dd864d7e117d2955d38d4f730653ce46a9861358e2dc", size = 633083, upload-time = "2026-05-08T12:29:02.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/e1/68c2256b69a314eba133673377ba9118c356f6342a0c02b61de449cf2bf2/narwhals-2.21.0-py3-none-any.whl", hash = "sha256:1e6617d0fca68ae1fda29e5397c4eaacd3ffc9fffe6bcd6ded0c690475e853be", size = 451943, upload-time = "2026-05-08T12:29:01.058Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + [[package]] name = "nodeenv" version = "1.10.0" @@ -897,6 +1395,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] +[[package]] +name = "numba" +version = "0.65.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite" }, + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/c5/db2ac3685833d626c0dcae6bd2330cd68433e1fd248d15f70998160d3ad7/numba-0.65.1.tar.gz", hash = "sha256:19357146c32fe9ed25059ab915e8465fb13951cf6b0aace3826b76886373ab23", size = 2765600, upload-time = "2026-04-24T02:02:56.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/b3/650500c2eab4534d98e9166f4298e0f3c69c742afdf24e6eabccd1f16ad8/numba-0.65.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:7020d74b19cdb8cff16506542fdd510756e28c5e7f3bd0b7f574f0f42272fcd9", size = 2680563, upload-time = "2026-04-24T02:02:18.414Z" }, + { url = "https://files.pythonhosted.org/packages/44/0b/0615dbedb98f5b32a35a53290fbdc6e22306968109278d7e58df82d7a9f6/numba-0.65.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f80ed83774b5173abd6581cd8d2165d1d38e13d2e5c8155c0c0b421784745420", size = 3745018, upload-time = "2026-04-24T02:02:20.252Z" }, + { url = "https://files.pythonhosted.org/packages/49/aa/4361698f35bf63bff67dfe6c90493731177f48ede954f77b0588731537bc/numba-0.65.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7ed425a43b0a5f9772f2f4e2dd0bbd12eabecae1af0b24efcfd4e053f012aac6", size = 3450962, upload-time = "2026-04-24T02:02:22.449Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9a/af61ec03b3116c161fd7a06b9e8a265729a8718458333e8ffbb06d9a3978/numba-0.65.1-cp311-cp311-win_amd64.whl", hash = "sha256:df40a5028a975b9ea66f6a2a3f7abbdbd541a863070e34ed367aff21141248e4", size = 2747417, upload-time = "2026-04-24T02:02:24.43Z" }, + { url = "https://files.pythonhosted.org/packages/57/bc/76f8f8c5cf9adee47fdb7bbb03be8900f76f902d451d7477cf12b845e1de/numba-0.65.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac3f1e77c352dd0ea9712732c2d8f9ca507717435eec5b5013bf138ac33c4a08", size = 2681371, upload-time = "2026-04-24T02:02:26.105Z" }, + { url = "https://files.pythonhosted.org/packages/69/47/a415af0283e4db0398104c6d1c11c9861a98dc67a7aa442a7769ed5d6196/numba-0.65.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:52bc6f3ceb8fcaff9b2ae26b4c6b1e9fee39db8d355534c0fe4f39a901246b84", size = 3802467, upload-time = "2026-04-24T02:02:27.712Z" }, + { url = "https://files.pythonhosted.org/packages/46/36/246f73ec99cfeab2f2cb2ce7d4218766cc36a2da418901223f4f4da9c813/numba-0.65.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90ca10b3463bae0bd70589726fe3c77d01d6b5fc86bee54bcdf9fb6b47c28977", size = 3502628, upload-time = "2026-04-24T02:02:29.763Z" }, + { url = "https://files.pythonhosted.org/packages/db/9e/3c679b2ee078425b9e99a91e44f8d132a6830d8ccce5227bc5e9181aeed8/numba-0.65.1-cp312-cp312-win_amd64.whl", hash = "sha256:5971c632be2a2351500431f46213821dba8d02b18a9f7d02fd36bd2743e41a6a", size = 2750611, upload-time = "2026-04-24T02:02:31.477Z" }, + { url = "https://files.pythonhosted.org/packages/79/37/14a4579049c1eb673afd0de0cb4842982acd55b9ce2643e763db858bcea0/numba-0.65.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1735c15c1134a5108b4d6a5c77fc0947924ea066a738dc09a52008c13df9cad3", size = 2681344, upload-time = "2026-04-24T02:02:33.65Z" }, + { url = "https://files.pythonhosted.org/packages/a0/22/b8d873f6466b20aa563fc9b33acd48dec89a07803ddaa2f1c8ca1cd33126/numba-0.65.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c09f49117ef255e1f1c6dad0c7a1ed39868243862a73be5706793241a3755f1b", size = 3810619, upload-time = "2026-04-24T02:02:36.041Z" }, + { url = "https://files.pythonhosted.org/packages/62/08/e16a8b5d9a018962ebb5c66be662317cde32b9f5dab08441f90bed5522fb/numba-0.65.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:594a8680b3fadac99e97e489b1fd89007177e5336713745c3b769528c635a464", size = 3509783, upload-time = "2026-04-24T02:02:38.245Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a5/03c970d57f4c1741354837353ce39fb5206952ae1dba8922d29c86f64805/numba-0.65.1-cp313-cp313-win_amd64.whl", hash = "sha256:85be74c0d036842699a30058f82fb88fc5ffdc59f7615cab5792ea92914c9b62", size = 2750534, upload-time = "2026-04-24T02:02:39.903Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2e/8aed9b726d9ba5f11ad287645fd479e88278db3060a25cb1225d730eb2b7/numba-0.65.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:33f5eb68eb1c843511615d14663ce60258525d6a4c65ab040e2c2b0c4cf17450", size = 2681554, upload-time = "2026-04-24T02:02:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/87/96/f3eb235fafa82a34e2ab5dd7dc9ffff998ebf5f0bbc23fa56a96aeb44da6/numba-0.65.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71e73029bf53a62cc6afcf96be4bd942290d8b4c55f0a454fb536158115790f7", size = 3779602, upload-time = "2026-04-24T02:02:43.726Z" }, + { url = "https://files.pythonhosted.org/packages/09/90/b0f09b48752d23640b8284f22aa597737e8adaddc7fbfacc4708b7f73a4c/numba-0.65.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a07635e0be926b9bdbffb09137c230fb13f6ec0e564914ba937cee12ce3eb35", size = 3479532, upload-time = "2026-04-24T02:02:45.427Z" }, + { url = "https://files.pythonhosted.org/packages/56/46/3f7fc04fb853559e74b210e0b62c19974ec844cefec611f9e535f4da3761/numba-0.65.1-cp314-cp314-win_amd64.whl", hash = "sha256:2a20fcdabdefbdacf88d85caf70c3b18c4bcb7ebb8f82e6a19486383dd26ab63", size = 2752637, upload-time = "2026-04-24T02:02:47.664Z" }, + { url = "https://files.pythonhosted.org/packages/81/7b/c1a341a9067367778f4152a5f01061cf281fb09582c92c510ec4918cabf6/numba-0.65.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:548dd4b3a4508d5062768d1514b2cd7b015f9a25ec7af651c50dee243965e652", size = 2684600, upload-time = "2026-04-24T02:02:49.653Z" }, + { url = "https://files.pythonhosted.org/packages/03/36/98ddbcf3e4f04a6dd07e1c67249955920579ba4af6bb6868e3088f4ed282/numba-0.65.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:78abc28feff2c2ff8307fff3975b6438352759c9acb797ecd6b1fb6e7e39e31d", size = 3817198, upload-time = "2026-04-24T02:02:51.266Z" }, + { url = "https://files.pythonhosted.org/packages/a3/83/0dad21057ece5a835599f5d24099b091703995e23dbbf894f259e91c010b/numba-0.65.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee7676cb389555805f9b9a1840cbcd1ea6c8bd5376ab6918e3a29c5ea1dbda20", size = 3533862, upload-time = "2026-04-24T02:02:52.987Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/8be7118ffd4c8440881046eac3d0982cc5ab42909508cf5d67024d62a2e4/numba-0.65.1-cp314-cp314t-win_amd64.whl", hash = "sha256:20609346e3bd75204950dcbbfe383a8d7dbf4902f442aedbf00f97fef4aa8f38", size = 2758237, upload-time = "2026-04-24T02:02:54.612Z" }, +] + [[package]] name = "numexpr" version = "2.14.1" @@ -1035,6 +1565,87 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075, upload-time = "2026-03-29T13:21:57.644Z" }, ] +[[package]] +name = "numpydantic" +version = "1.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/28/fb2fa636e777d3a0636697b59e0c3310dbfa5a4126ba3515bb0848e20032/numpydantic-1.8.1.tar.gz", hash = "sha256:e5192efee5784df5cb70f99937e3538fdcbe58ed445c53935f39e5ab2b3f8ea6", size = 82121, upload-time = "2026-04-14T00:01:18.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/e1/9af63cd9a101ac1c1362200705fb3fa5aabe80a5d63674d0253b18a1072b/numpydantic-1.8.1-py3-none-any.whl", hash = "sha256:f3170b44cdcb168d3799eccbbbe8993f146e90211db9d9903f62b56006e8baca", size = 87926, upload-time = "2026-04-14T00:01:17.388Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" }, + { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" }, + { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" }, + { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, + { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, +] + [[package]] name = "packaging" version = "26.2" @@ -1044,6 +1655,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] +[[package]] +name = "palettable" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/3d/a5854d60850485bff12f28abfe0e17f503e866763bed61aed4990b604530/palettable-3.3.3.tar.gz", hash = "sha256:094dd7d9a5fc1cca4854773e5c1fc6a315b33bd5b3a8f47064928facaf0490a8", size = 106639, upload-time = "2023-04-19T23:13:35.864Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f7/3367feadd4ab56783b0971c9b7edfbdd68e0c70ce877949a5dd2117ed4a0/palettable-3.3.3-py2.py3-none-any.whl", hash = "sha256:74e9e7d7fe5a9be065e02397558ed1777b2df0b793a6f4ce1a5ee74f74fb0caa", size = 332251, upload-time = "2023-04-19T23:13:33.996Z" }, +] + [[package]] name = "pandas" version = "3.0.2" @@ -1104,6 +1724,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/2b/f8434233fab2bd66a02ec014febe4e5adced20e2693e0e90a07d118ed30e/pandas-3.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", size = 9455341, upload-time = "2026-03-31T06:48:28.418Z" }, ] +[[package]] +name = "parso" +version = "0.8.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" }, +] + [[package]] name = "pathspec" version = "1.1.0" @@ -1126,6 +1755,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/92/6f/ad8db42b3a744e910e62a8781282acadf7b95ff16f714f05347f6fb6129b/PeakUtils-1.3.5-py3-none-any.whl", hash = "sha256:5c54ca98ba3177b8c1ae4c5fdfd1b09d7bec947b9c25d9e4bd25334526ca98e5", size = 7722, upload-time = "2024-06-27T01:33:28.172Z" }, ] +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + [[package]] name = "pillow" version = "12.2.0" @@ -1222,6 +1863,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" }, ] +[[package]] +name = "plotly" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/7f/0f100df1172aadf88a929a9dbb902656b0880ba4b960fe5224867159d8f4/plotly-6.7.0.tar.gz", hash = "sha256:45eea0ff27e2a23ccd62776f77eb43aa1ca03df4192b76036e380bb479b892c6", size = 6911286, upload-time = "2026-04-09T20:36:45.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl", hash = "sha256:ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0", size = 9898444, upload-time = "2026-04-09T20:36:39.812Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -1243,6 +1897,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/ad/45312df6b63ba64ea35b8d8f5f0c577aac16e6b416eafe8e1cb34e03f9a7/plumbum-1.10.0-py3-none-any.whl", hash = "sha256:9583d737ac901c474d99d030e4d5eec4c4e6d2d7417b1cf49728cf3be34f6dc8", size = 127383, upload-time = "2025-10-31T05:02:47.002Z" }, ] +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload-time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, +] + [[package]] name = "pre-commit" version = "4.6.0" @@ -1259,6 +1922,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, ] +[[package]] +name = "prettytable" +version = "3.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/45/b0847d88d6cfeb4413566738c8bbf1e1995fad3d42515327ff32cc1eb578/prettytable-3.17.0.tar.gz", hash = "sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0", size = 67892, upload-time = "2025-11-14T17:33:20.212Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/8c/83087ebc47ab0396ce092363001fa37c17153119ee282700c0713a195853/prettytable-3.17.0-py3-none-any.whl", hash = "sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287", size = 34433, upload-time = "2025-11-14T17:33:19.093Z" }, +] + [[package]] name = "prompt-toolkit" version = "3.0.52" @@ -1271,6 +1946,191 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, ] +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, + { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, + { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, + { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, + { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/32cf8e3009e92b2645cf1e944f701e8ea4e924dffde1ee26db860bcbf7e4/propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9", size = 63422, upload-time = "2026-05-08T21:00:16.824Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/f112433f99fc979431b87a39ef169e3f8df070d99a72792c56d6937ac48b/propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42", size = 64342, upload-time = "2026-05-08T21:00:18.362Z" }, + { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/cc/da/4d775080b1490c0ae604acda868bd71aabe3a89ed16f2aa4339eb8a283e7/propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba", size = 61588, upload-time = "2026-05-08T21:00:21.155Z" }, + { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/70/60/189be62e0dd898dce3b331e1b8c7a543cd3a405ac0c81fe8ee8a9d5d77e1/propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64", size = 56774, upload-time = "2026-05-08T21:00:24.001Z" }, + { url = "https://files.pythonhosted.org/packages/ea/9e/93377b9c7939c1ffae98f878dee955efadfd638078bc86dbc21f9d52f651/propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913", size = 63532, upload-time = "2026-05-08T21:00:25.545Z" }, + { url = "https://files.pythonhosted.org/packages/14/f9/590ef6cfb9b8028d516d287812ece32bb0bc5f11fbb9c8bf6b2e6313fec8/propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1", size = 61592, upload-time = "2026-05-08T21:00:27.186Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5e/70958b3034c297a630bba2f17ca7abc2d5f39a803ad7e370ab79d1ecd022/propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33", size = 64788, upload-time = "2026-05-08T21:00:28.8Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/cf/74/66bd798b5b3be70aa1b391f5cc9d6a0a5532d7fd3b19ec0b213e72e6ad9d/propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031", size = 39018, upload-time = "2026-05-08T21:00:31.622Z" }, + { url = "https://files.pythonhosted.org/packages/61/7c/5c0d34aa3024694d6dcb9271cdbdd08c4e47c1c0ad95ec7e7bc74cdea145/propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42", size = 42322, upload-time = "2026-05-08T21:00:32.918Z" }, + { url = "https://files.pythonhosted.org/packages/4d/91/875812f1a3feb20ceba818ef39fbe4d92f1081e04ac815c822496d0d038b/propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84", size = 38172, upload-time = "2026-05-08T21:00:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/83d1d05655baf63113731bd5a1008435e14f8d1e5a06cbe4ec5b23ad7a31/propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117", size = 53835, upload-time = "2026-05-08T21:00:38.072Z" }, + { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e4/5d7663dc8235956c8f5281698a3af1d351d8820341ddd890f59d9a9127f2/propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e", size = 63261, upload-time = "2026-05-08T21:00:41.775Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/15a03adee24d6350da4292caeac44c34c033d2afe5e87eb370f38854560f/propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7", size = 64184, upload-time = "2026-05-08T21:00:43.018Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/63e8cd1bae4c2d2be6493b6b7d10566ddafad88137cfbc99964a1119853c/propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a", size = 61500, upload-time = "2026-05-08T21:00:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/db650677f554a95b9c01a7c9d93d629e93a15562f5deb4573c9ee136fed2/propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa", size = 56884, upload-time = "2026-05-08T21:00:48.376Z" }, + { url = "https://files.pythonhosted.org/packages/80/45/70b39b89516ff8b96bf732fa6fded8cef20f293cb1508690101c3c07ec51/propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853", size = 63464, upload-time = "2026-05-08T21:00:49.954Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/fa59d3a89eac5534293124af4f1d0d0ada091ce4a0ab4610ce03fd2bdd8d/propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a", size = 61588, upload-time = "2026-05-08T21:00:51.281Z" }, + { url = "https://files.pythonhosted.org/packages/0b/97/efb547a55c4bc7381cfb202d6a2239ac621045277bc1ea5dfd3a7f0516c0/propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704", size = 64667, upload-time = "2026-05-08T21:00:52.602Z" }, + { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3b/484a3a65fc9f9f60c41dcd17b428bace5389544e2c680994534a20755066/propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d", size = 38621, upload-time = "2026-05-08T21:00:55.808Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fd/3f0f10dba4dabad3bf53102be007abf55481067952bde0fdddff439e7c61/propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757", size = 41649, upload-time = "2026-05-08T21:00:57.061Z" }, + { url = "https://files.pythonhosted.org/packages/90/ec/6ce619cc32bb500a482f811f9cd509368b4e58e638d13f2c68f370d6b475/propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f", size = 37636, upload-time = "2026-05-08T21:00:58.646Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d4/52c871e73e864e6b34c0e2d58ac1ec5ccd149497ddc7ad2137ae98323a35/propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa", size = 56257, upload-time = "2026-05-08T21:01:01.195Z" }, + { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" }, + { url = "https://files.pythonhosted.org/packages/65/19/c10badaa463dde8a27ce884f8ee2ec37e6035b7c9f5ff0c8f74f06f08dac/propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f", size = 65283, upload-time = "2026-05-08T21:01:05.959Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b6/93bea99ca80e19cef6512a8580e5b7857bbe09422d9daa7fd4ef5723306c/propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c", size = 66616, upload-time = "2026-05-08T21:01:07.228Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/99238894047b13c823be25027e736626cd414a52a5e30d2c3347c2733529/propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f", size = 63664, upload-time = "2026-05-08T21:01:09.874Z" }, + { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" }, + { url = "https://files.pythonhosted.org/packages/e4/03/893cf147de2fc6543c5eaa07ad833170e7e2a2385725bbebe8c0503723bb/propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751", size = 59595, upload-time = "2026-05-08T21:01:12.387Z" }, + { url = "https://files.pythonhosted.org/packages/86/3b/04c1a2e12c57766568ba75ba72b3bf2042818d4c1425fab6fc07155c7cff/propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836", size = 65711, upload-time = "2026-05-08T21:01:13.676Z" }, + { url = "https://files.pythonhosted.org/packages/1c/34/80f8d0099f8d6bacc4de1624c85672681c8cd1149ca2da0e38fd120b817f/propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f", size = 64247, upload-time = "2026-05-08T21:01:14.936Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1a/8b08f3a5f1037e9e370c55883ceeeee0f6dd0416fb2d2d67b8bfc91f2a79/propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55", size = 67102, upload-time = "2026-05-08T21:01:16.281Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/50fb0b5d3968b61a510926ff8b8465f1d6e976b3ab74496d7a4b9fc42515/propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191", size = 42546, upload-time = "2026-05-08T21:01:18.946Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4c/0ddbae64321bd4a95bcbfc19307238016b5b1fee645c84626c8d539e5b74/propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7", size = 46330, upload-time = "2026-05-08T21:01:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/00/d9/9cddc8efb78d8af264c5ec9f6d10b62f57c515feda8d321595f56010fb23/propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96", size = 40521, upload-time = "2026-05-08T21:01:21.399Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/b5/06/c5a52f419b5d8972f8d46a7577476090d8e3263ff589ce40b5ca4968d5be/propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e", size = 53928, upload-time = "2026-05-08T21:01:23.986Z" }, + { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/4c/29/fe1aebec2ce57ab985a9c382bded1124431f85078113aa222c5d278430d4/propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979", size = 63300, upload-time = "2026-05-08T21:01:27.937Z" }, + { url = "https://files.pythonhosted.org/packages/b4/18/2334b26768b6c82be8c69e83671b767d5ef426aa09b0cba6c2ea47816774/propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80", size = 64208, upload-time = "2026-05-08T21:01:29.484Z" }, + { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" }, + { url = "https://files.pythonhosted.org/packages/c4/46/b3ff8aba2b4953a3e50de2cf72f1b5748b8eca93b15f3dc2c84339084c09/propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39", size = 61724, upload-time = "2026-05-08T21:01:32.374Z" }, + { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/5c6f7622d510cc666a300687e06fd060c1a43361c0c9b20d284f06d8096a/propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5", size = 57099, upload-time = "2026-05-08T21:01:34.915Z" }, + { url = "https://files.pythonhosted.org/packages/55/27/9cb0b4c679124085327957d42521c99dba04c88c90c3e55a6f0b633ebccc/propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702", size = 63391, upload-time = "2026-05-08T21:01:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9d/7258aaa5bdf60fc6f27591eef6fe52768cb0beda7140be477c8b12c9794a/propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3", size = 61626, upload-time = "2026-05-08T21:01:37.545Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/41c602003e8a9b16fe1e7eadf62c7bfba9d5474370b24200bf48b315f45f/propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5", size = 64781, upload-time = "2026-05-08T21:01:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/95/ca/bbfe9b910ce57dde8bb4876b4520fc02a4e89497c10de26be936758a3aaa/propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0", size = 39436, upload-time = "2026-05-08T21:01:41.654Z" }, + { url = "https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c", size = 42373, upload-time = "2026-05-08T21:01:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/44/68/9ea5103f41d5217d7d6ec24db90018e23aebec070c3f9a6e54d12b841fd8/propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0", size = 38554, upload-time = "2026-05-08T21:01:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c9/c61e134a686949cf7971af3a390148b1156f7be81c73bc0cd12c873e2d48/propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078", size = 56653, upload-time = "2026-05-08T21:01:47.307Z" }, + { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" }, + { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a1/859942de9a791ff42f6141736f5b37749b8f53e65edfa49638c67dd67e6a/propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe", size = 65542, upload-time = "2026-05-08T21:01:51.204Z" }, + { url = "https://files.pythonhosted.org/packages/b5/61/315bc0fd6c0fc7f80a528b8afd209e5fc4a875ea79571b91b8f50f442907/propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03", size = 66845, upload-time = "2026-05-08T21:01:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" }, + { url = "https://files.pythonhosted.org/packages/c8/54/c317819ec157cbf6f35df9df9657a6f82daf34d5faf15948b2f639c2192e/propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285", size = 63999, upload-time = "2026-05-08T21:01:55.179Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9c/596784cb5824ed61ee960d3f8655a3f0993e107c6e98ab6c818b7fb92ccb/propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8", size = 59796, upload-time = "2026-05-08T21:01:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/c2/3d/1a6cfa1726a48542c1e8784a0761421476a5b68e09b7f36bf95eb954aaba/propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366", size = 66023, upload-time = "2026-05-08T21:02:00.228Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0e/05fd6990369477076e4e280bcb970de760fddf0161a46e988bc95f7940ec/propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56", size = 64448, upload-time = "2026-05-08T21:02:01.888Z" }, + { url = "https://files.pythonhosted.org/packages/cd/86/5f8da315a4309c62c10c0b2516b17492d5d3bbe1bb862b96604db67e2a37/propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d", size = 67329, upload-time = "2026-05-08T21:02:03.484Z" }, + { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" }, + { url = "https://files.pythonhosted.org/packages/d5/07/127e8b0bacfb325396196f9d976a22453049b89b9b2b08477cc3145faa44/propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821", size = 43813, upload-time = "2026-05-08T21:02:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/46dad6c0ae49ed230ab1b16c890c2b6314e2403e6c412976f4a72d64a527/propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370", size = 47764, upload-time = "2026-05-08T21:02:07.353Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/a47d0a63aa309d10d59ede6e9d4cff03a344a79d1f0f4cd0cd74997b53e0/propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6", size = 41140, upload-time = "2026-05-08T21:02:09.065Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pycifrw" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "ply" }, + { name = "prettytable" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/58/e0/f1871f520c359e4e3a2eb7437c9e7e792bb6c356414e8617937561167caf/pycifrw-5.0.1.tar.gz", hash = "sha256:e636b80be6a2be15b215e69ecec0c0a784ebcbfed8b1e3bac4bcc6e6ba9a75e0", size = 896861, upload-time = "2025-03-24T05:34:42.247Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/b6/84364503e0726da4a263e1736d0e1754526d1b1729d0087c680d96345570/pycifrw-5.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3eba3a2d394e82fd4a1ca143080f7f938d6aa169c460e0bcd39a7bad4c29a0d2", size = 184019, upload-time = "2025-03-24T05:34:21.106Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5c/b999ea3e64981018d52846b9b69193fa581a70cd255912cb6962a33a666a/pycifrw-5.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f200aae9d7cf9c8857326587ee949dad9de8480f38d98ac6d6ee2dff5ab2308", size = 184022, upload-time = "2025-03-24T05:34:22.703Z" }, + { url = "https://files.pythonhosted.org/packages/75/35/a44ce3d7c3f52a2a443cae261a05c2affc52fde7f1643974adbef105785f/pycifrw-5.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6569131e601f857f72824ccac73efc38ab7a712f465c2248181f798105196491", size = 204621, upload-time = "2025-03-24T05:34:24.167Z" }, + { url = "https://files.pythonhosted.org/packages/8d/87/a5148792c832cd243bd68c144bb9e25a55130b0fe2b0622330572dc50ebb/pycifrw-5.0.1-cp311-cp311-win32.whl", hash = "sha256:e7da341b9568861f2a75116690ef2037f2b4c82f61af454b953ef0011ec6e43a", size = 183552, upload-time = "2025-03-24T05:34:25.803Z" }, + { url = "https://files.pythonhosted.org/packages/7c/58/e60915c59f4adcbd97af30047694978127d63139ae05a0cf987c6f2e90f9/pycifrw-5.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bca7cc9685b70c45aa326a301b65d393b7a58ba5a07c29c2066c2ebbdc0393d2", size = 184705, upload-time = "2025-03-24T05:34:27.417Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b1/c227e507318a605d863d6f5112ab567b39109895c77ad1be4fc697ae01ff/pycifrw-5.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4942c2eb7b4eb54e0909d90f4301f5c5be122ef6c0f5707cd6aa11c87bf91847", size = 184048, upload-time = "2025-03-24T05:34:29.074Z" }, + { url = "https://files.pythonhosted.org/packages/32/a0/37fb236da6040e337381dd656cafb97d09eacb998c5db3057547f5ffddd9/pycifrw-5.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d0464e10abda9890347a95c8c385654c2741fca186df371a5c47c3b4b819866", size = 184024, upload-time = "2025-03-24T05:34:30.624Z" }, + { url = "https://files.pythonhosted.org/packages/ae/61/3c1ea8c10bf4f6bf83c33a7f5b4a3143f4cc1f979859dec5498b6cc31900/pycifrw-5.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:379801e71509d0f9c59b56edc5ceb6600796eaf2b84ee5e0f5a256c76542047d", size = 204922, upload-time = "2025-03-24T05:34:32.211Z" }, + { url = "https://files.pythonhosted.org/packages/07/84/a1f98428d20611a21f47144788ce56c4cda7a93aa62eba88855a736dc1cc/pycifrw-5.0.1-cp312-cp312-win32.whl", hash = "sha256:7dbbed562238416e81cb614e2df433182c75b4fd330e182db0d5875b20472704", size = 183571, upload-time = "2025-03-24T05:34:33.44Z" }, + { url = "https://files.pythonhosted.org/packages/28/55/5733807f4af131ea6194309ac0f43eb5b05463c676d036ef948f3143c1f2/pycifrw-5.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:9d2939cce3bded805f02beda5a6aea62eb95951d59a1b99d73aa3463052fe4fe", size = 184706, upload-time = "2025-03-24T05:34:34.636Z" }, + { url = "https://files.pythonhosted.org/packages/87/0d/6af0bb9a45c771ffccd5c4c035c57ac9005e711b1191ddad1dd954187cfe/pycifrw-5.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1d01c83295a9e5f91e1cd5df03a24387a79388992b60c9e043f2c24a65b6607d", size = 184049, upload-time = "2025-03-24T05:34:35.867Z" }, + { url = "https://files.pythonhosted.org/packages/83/81/bdd4bfabe70b7c9a8c0716a722ced4ebd27311afd1f4800cd405d3229c1b/pycifrw-5.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e9ad2fdb4fca6398ed5ae50c19908bf6238434893b68d0125bda79a54a03d708", size = 184027, upload-time = "2025-03-24T05:34:37.043Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a5/a8c7562ec39f2647245b52ea4aeb13b5b125b3f48c0c152e9ebce7047a0a/pycifrw-5.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65a90ee34e46e6be20834493382585277d12daaa8d1a145cb158c163b3d9fc1c", size = 205819, upload-time = "2025-03-24T05:34:38.623Z" }, + { url = "https://files.pythonhosted.org/packages/66/4a/a59dbf6f3ceccf277b2969dd0bc7b9b162f8284b032a47a59ed26c77313d/pycifrw-5.0.1-cp313-cp313-win32.whl", hash = "sha256:6fdb4cfd28cb70eea64c3520e0c29559e38cf82f819bae818a4b94ffa210aae9", size = 183574, upload-time = "2025-03-24T05:34:39.736Z" }, + { url = "https://files.pythonhosted.org/packages/9f/9b/50835e8fd86073fa7aa921df61b4cebc1f0ff400e4338541675cb72b5507/pycifrw-5.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:8632df76b99932408ab432e09b30aa9a6c390df884a5f34f1e1f76201e625156", size = 184711, upload-time = "2025-03-24T05:34:40.918Z" }, +] + [[package]] name = "pydantic" version = "2.13.3" @@ -1431,6 +2291,66 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, ] +[[package]] +name = "pymatgen" +version = "2026.5.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pymatgen-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/a1/727feae7083bb3b10ba9d43ccbbe83317d4654957a08cee52096ef86bfde/pymatgen-2026.5.4.tar.gz", hash = "sha256:4998d6084da72224c8025dc1e9645b2aab73896109a7ef1e05bd479a25a55b79", size = 743199, upload-time = "2026-05-04T22:03:24.675Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/3a/de29b0b6c1740098c3ccdd3fa69336dc39b5efc6840a55e30dcaea01a19b/pymatgen-2026.5.4-py3-none-any.whl", hash = "sha256:7815cd4310c6d5a465b0da14a1633479cf61366676e62764db17f7e2a20d1974", size = 829056, upload-time = "2026-05-04T22:03:22.327Z" }, +] + +[[package]] +name = "pymatgen-core" +version = "2026.4.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bibtexparser" }, + { name = "joblib" }, + { name = "lxml" }, + { name = "matplotlib" }, + { name = "monty" }, + { name = "networkx" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "palettable" }, + { name = "pandas" }, + { name = "plotly" }, + { name = "requests" }, + { name = "scipy" }, + { name = "spglib" }, + { name = "sympy" }, + { name = "tabulate" }, + { name = "tqdm" }, + { name = "uncertainties" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/75/74/64e3b140394de86baf743426d77c3d9e37701ce25a0c00d4267723003bcc/pymatgen_core-2026.4.16.tar.gz", hash = "sha256:7b5f00ce7c6ae6d77eb79ab1d7f71609a639dbd9639d299cc3a9e1fac65adaf6", size = 2527245, upload-time = "2026-04-16T01:04:24.612Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/c9/d1d4daf672fe738aaa09fb4afeceab695c935bd2e9d4da4024b033d960ae/pymatgen_core-2026.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c75d62e1dfb81f2bd164da2e66d78e284051b98bb850edc35bda788a329dad47", size = 2879100, upload-time = "2026-04-16T01:04:21.806Z" }, + { url = "https://files.pythonhosted.org/packages/36/7d/c5973afcc1dfd0a3ab5d6c8c9cdb3b6414bdd77caa0450caec3a8f93f738/pymatgen_core-2026.4.16-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b3bdc5783a79aa117166a20246239b0609b4ef588dcdde1943792390fe60589", size = 3904229, upload-time = "2026-04-16T01:30:43.618Z" }, + { url = "https://files.pythonhosted.org/packages/76/7a/5b6a298be00c312a77a7b9e0b4f7ef10ae1c4aae1125b07693535ed49084/pymatgen_core-2026.4.16-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45eb5d96b3d64ba24c2120aa608bda9396fe0d7f316e223722fcfa12ff556446", size = 3932163, upload-time = "2026-04-16T01:30:45.242Z" }, + { url = "https://files.pythonhosted.org/packages/32/fe/f4e2abcb189a9ae50bb051fbbed0062df814fa7d653705d3b10173ff0152/pymatgen_core-2026.4.16-cp311-cp311-win32.whl", hash = "sha256:54780258e6730533e04850b6f92600d1d29097025aec6a8f6dd14bd738cd48a1", size = 2837683, upload-time = "2026-04-16T01:30:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/b4/00/18781f5a02ff0cdef2497b36ead0f18c8101f61d74fd68fd81d4fbefc043/pymatgen_core-2026.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8ecaa17bc159fbbeb0b42367a61f6b5178c4d3cdc1b9f19951e360e5833cd260", size = 2867173, upload-time = "2026-04-16T01:30:48.715Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2f/fb85f7c3f27f9bc455656e9dddbf74d0562d7fa5ac9d93184d7f3f3dbac9/pymatgen_core-2026.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e861357ef60755ea3be2a430b93038468dee346dba671c0b66042e57682947b", size = 2882980, upload-time = "2026-04-16T01:30:50.383Z" }, + { url = "https://files.pythonhosted.org/packages/43/51/0da63dd3e50bead08b87490303aef720e1a79492cf04cd16c428a6eb2ff9/pymatgen_core-2026.4.16-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25f9acab9cb2ff4a232ed4915e6063d604958604760e57c5c462343b0a500322", size = 3901165, upload-time = "2026-04-16T01:30:52.07Z" }, + { url = "https://files.pythonhosted.org/packages/15/30/8f0f0db8b335421b6c45aa0e3339f7ec3bafe237617c024c96197434d37a/pymatgen_core-2026.4.16-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75a8f164806386546e263a464cfba10e5c513aadec9b538b58a523f9c3e7deea", size = 3940640, upload-time = "2026-04-16T01:30:54.916Z" }, + { url = "https://files.pythonhosted.org/packages/8e/2d/113d8bed22fe52c9a38d779ade8b22d4d6528495af0ef07ede02abf819cf/pymatgen_core-2026.4.16-cp312-cp312-win32.whl", hash = "sha256:9345c32a11c57409bd404388333f4e9ed4c32e47ad379c6af34db92700d695ad", size = 2835894, upload-time = "2026-04-16T01:30:56.742Z" }, + { url = "https://files.pythonhosted.org/packages/17/8c/10cb89a2262dd53ec4ec370f7a25fc6ad6ea9acd50b44bfe62ebf597a941/pymatgen_core-2026.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:3c9839f9c175830cce5c13c704888d8aad4981b8988c425c1ca0f2563bf38208", size = 2866605, upload-time = "2026-04-16T01:30:58.794Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/c4bac8bb205ded6af21d7ec42108cd99795f393b6b4518123d7598a5ac3c/pymatgen_core-2026.4.16-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b04742e9a2b14a074ce4a1a573e68eeb0142dfe3a98ce278297c76a64f675ae9", size = 2881601, upload-time = "2026-04-16T01:31:00.576Z" }, + { url = "https://files.pythonhosted.org/packages/75/cc/dd8740c5eaa24cdcc9ecb70f022c57f877df4d66f841532f6dba28dd6660/pymatgen_core-2026.4.16-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45837bd4e5e760b3e346df0dfa408c4948b11f86c5d1478f3ef3f90bce2e54b0", size = 3892512, upload-time = "2026-04-16T01:31:02.068Z" }, + { url = "https://files.pythonhosted.org/packages/09/e5/2bf7ce92c6918d010c20096c5c3c75efd1b6adc284e9443b6df307013b69/pymatgen_core-2026.4.16-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3fdd047766096ab0bbdee9ebd0338286ebc2b0780fa39d603b407cd67d992997", size = 3930890, upload-time = "2026-04-16T01:31:03.781Z" }, + { url = "https://files.pythonhosted.org/packages/cc/cc/97e6d1644f82ae9c0d6e4ae4709c75f248d580d9dab2a8af819e741008a8/pymatgen_core-2026.4.16-cp313-cp313-win32.whl", hash = "sha256:0ab43a7ee12e843f9eb8957f6b2dd9558e513daeb2d2be45ecfae963fd0e6b95", size = 2835716, upload-time = "2026-04-16T01:31:05.584Z" }, + { url = "https://files.pythonhosted.org/packages/eb/5d/d0dd9c8913686b0ed4b64f21c45730cc437d151d0fd6de2e7e666cffe5b8/pymatgen_core-2026.4.16-cp313-cp313-win_amd64.whl", hash = "sha256:149c1b4f8daa4d387f5f641bda606db7ef9dcb960e76e16d429bb3dd263c76ef", size = 2866166, upload-time = "2026-04-16T01:31:07.473Z" }, + { url = "https://files.pythonhosted.org/packages/85/52/5547cbeb845fa31061b70057f2dd75d2881d44273c2d27d0eda7caa7f3f2/pymatgen_core-2026.4.16-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98738152da9bf8150435975c4ef79bad3a1c88fe81711ca02cb9ea74d29b1e2c", size = 2883130, upload-time = "2026-04-16T01:31:09.421Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/3ad93d5b0d7a4a773a79f5d2bdf72fc55a9fe29f7fdbc6e8e5de1c9be549/pymatgen_core-2026.4.16-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d74dcb66871c73beb7f1c4aa5a8dda016514408cf8a7bf1194a9d71869ab5cb1", size = 3889851, upload-time = "2026-04-16T01:31:10.989Z" }, + { url = "https://files.pythonhosted.org/packages/57/bf/558f74b69f6023818c985bc991dfbf11a195ef0b0940749383fde63f8ebf/pymatgen_core-2026.4.16-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:700435b88ec6e590170487a72c09aa6407dcdb28c77fca5e3d532f83b418f307", size = 3920993, upload-time = "2026-04-16T01:31:13.019Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c5/15a7c30453dcc5e2aa924e1d4283222d3f46db5a177fece4586a6debb833/pymatgen_core-2026.4.16-cp314-cp314-win32.whl", hash = "sha256:694e4fb035d6712b23c43f022d18b739805885e26c7fd0cc7de2df4821b52a40", size = 2813481, upload-time = "2026-04-16T01:31:14.963Z" }, + { url = "https://files.pythonhosted.org/packages/67/8f/9320145f0eed0a5559d95cf8c9dadd15329d4b2127d2f769e658bcca19ae/pymatgen_core-2026.4.16-cp314-cp314-win_amd64.whl", hash = "sha256:0f9ef6f5cbe9acf7fae748ffc511518f543b1390d1cbd18fecbb14d72a879440", size = 2844999, upload-time = "2026-04-16T01:31:16.482Z" }, +] + [[package]] name = "pyparsing" version = "3.3.2" @@ -1452,6 +2372,64 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/cc/cecf97be298bee2b2a37dd360618c819a2a7fd95251d8e480c1f0eb88f3b/pyproject_api-1.10.0-py3-none-any.whl", hash = "sha256:8757c41a79c0f4ab71b99abed52b97ecf66bd20b04fa59da43b5840bac105a09", size = 13218, upload-time = "2025-10-09T19:12:24.428Z" }, ] +[[package]] +name = "pyqt6" +version = "6.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyqt6-qt6" }, + { name = "pyqt6-sip" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/47/b25c13eca5bebc6505394d0223e46d7ebf0c57dcac2ed908d7d19b18ab6b/pyqt6-6.11.0.tar.gz", hash = "sha256:45dd60aa69976de1918b5ced6b4e7b6a25abd2a919ecef5fd5826ecc76718889", size = 1087430, upload-time = "2026-03-30T09:16:13.543Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/44/fcd3dd3f64c83c96bf9bce76ec16cca64bd9b91702c3d08fd8e3dafc73d9/pyqt6-6.11.0-cp310-abi3-macosx_10_14_universal2.whl", hash = "sha256:f7100bc7f72b12581ec479a733f4ad11b8002668e6786e8a445ab6f4d1c743d4", size = 12429735, upload-time = "2026-03-30T09:16:03.713Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a0/bd1399740dfa80c0a94d20b02d89962a31458233dcf70eaa09bfbccf3d0f/pyqt6-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8555277989fa7d114cb3c3443fd261d566909f7268ceedd41d93a5f02d37ec05", size = 8334632, upload-time = "2026-03-30T09:16:06.066Z" }, + { url = "https://files.pythonhosted.org/packages/d3/db/425b184ac2430ba1978bb507ffd285ec007a872644e2ae5df13332dbcb05/pyqt6-6.11.0-cp310-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:0734959955adde095af9a074213a7f73386d1bbbddfc27346b4c0621641a692e", size = 8321484, upload-time = "2026-03-30T09:16:08.135Z" }, + { url = "https://files.pythonhosted.org/packages/6f/85/dd9f03d78d87460e109e0121cd6201c5802bdd655656bf2780e964870fea/pyqt6-6.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:bd11b459c54dca068e988a42cf838303334f0d441b9d16d92ae6719fcb5ac6ba", size = 6844358, upload-time = "2026-03-30T09:16:09.766Z" }, + { url = "https://files.pythonhosted.org/packages/cd/75/970b041bde4372cc6739c5ef9db1de83a6b36e788e4992e598baa35b2255/pyqt6-6.11.0-cp310-abi3-win_arm64.whl", hash = "sha256:b6324e3501b19b4292c7a55b1f22e82d3e80e519e383ce4fe79b4a754c6f0288", size = 5933984, upload-time = "2026-03-30T09:16:11.817Z" }, +] + +[[package]] +name = "pyqt6-qt6" +version = "6.11.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/5e/9e65b87ba746bb3a2ee81d6f3b2a8a7a4dfc33335c0a6afa15e8621e5fe9/pyqt6_qt6-6.11.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:447b04baf9bfd800410dc6a3b6faf24a2b754bd6e1c5d0dc609e6935362828f3", size = 70238920, upload-time = "2026-03-24T15:01:22.753Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b2/a15f88a0d9f550b9581592f79fb64b827ab3d3343cbb2af05912e6c77d26/pyqt6_qt6-6.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b510d0cb8f4d3f4306b6ff33a63234139c9c87c160909d3853e4deb1094782c2", size = 64036460, upload-time = "2026-03-24T15:01:42.951Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f9/99696e6b2325ae54868111f581c59a8a6283b8f21bc931837f49093bc582/pyqt6_qt6-6.11.0-py3-none-manylinux_2_34_x86_64.whl", hash = "sha256:c2c3a14714536256a9fd761a8ac8e030dfed7b991200a220ca79d399fcc3d265", size = 85757517, upload-time = "2026-03-24T15:02:11.86Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3c/a420d08723d4ab1998afead3e6f643333e93a9eadfde3486bdec25acfff0/pyqt6_qt6-6.11.0-py3-none-manylinux_2_39_aarch64.whl", hash = "sha256:acc5b78d7f718a5642f14b37928e074b048751cc86edb4c539e4425bfbd26827", size = 84854032, upload-time = "2026-03-24T15:03:26.991Z" }, + { url = "https://files.pythonhosted.org/packages/36/cd/da0147d331b44587a7214c7f59719ac4f8e9433b268016962b02067007d1/pyqt6_qt6-6.11.0-py3-none-win_amd64.whl", hash = "sha256:b0e42629cef2575f2178aaeb32b0e539291df869f91f4df48983da3ccaad05af", size = 78309473, upload-time = "2026-03-24T15:03:53.396Z" }, + { url = "https://files.pythonhosted.org/packages/72/9a/8d09ca47a61c2504b49e16c97ccde99b120ceec323d97f7ca776f8331213/pyqt6_qt6-6.11.0-py3-none-win_arm64.whl", hash = "sha256:bcfa594171408319935c25afc7f82a3ae3ba90678ea194631bbca1c6f68daa6d", size = 59848654, upload-time = "2026-03-24T15:04:18.117Z" }, +] + +[[package]] +name = "pyqt6-sip" +version = "13.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/24/a753e1af94b9ae5b2da63d4598457308da3cdbf0838c959381db086ccc86/pyqt6_sip-13.11.1.tar.gz", hash = "sha256:869c5b48afe38e55b1ee0dd72182b0886e968cc509b98023ff50010b013ce1be", size = 92574, upload-time = "2026-03-09T13:01:35.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/fa/049879f61888462099dcbab495ad16df770cca2432330cca0767ab8e87cb/pyqt6_sip-13.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0ec2128c174db352bec1c8d23a437e970e8d5a78ac50315d8dfc671fcf7a7da", size = 111056, upload-time = "2026-03-09T13:01:07.998Z" }, + { url = "https://files.pythonhosted.org/packages/d5/0d/6ee861c53f3f7e6c5dd34a441d17aad1dfb3d50ce1f1a024cc9194ac3db3/pyqt6_sip-13.11.1-cp311-cp311-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6aa6c15ad3a9bb86e69119baff77b4ac17c47e55ee567abff616a4652051a6cc", size = 289930, upload-time = "2026-03-09T13:01:11.122Z" }, + { url = "https://files.pythonhosted.org/packages/ca/39/c975733d7204a594e6ae51d3a810aad539d09718aa3ceeb0dd28cb3276bd/pyqt6_sip-13.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ee652b272373c4f9287625ef32ad4ec1f0755c24928dc958a870b7a928b288c", size = 315827, upload-time = "2026-03-09T13:01:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d6/c40e8ae38a6e2bce9e837b64688f55746bfdad1aa557eb733fb5e90edd7c/pyqt6_sip-13.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:98db8ed37cf08130e1ee74b8ff47a6bfb8c3cdfe826310597a630a50e47feedc", size = 54029, upload-time = "2026-03-09T13:01:12.261Z" }, + { url = "https://files.pythonhosted.org/packages/fb/63/ec8c21ef9edffb55af42c637325d72eca4ea90a73ab714aaa1429c757e85/pyqt6_sip-13.11.1-cp311-cp311-win_arm64.whl", hash = "sha256:3af7a49dce4c35c5464309232c81cc1da5ec6074f46d2957831ee4031b8eefa6", size = 48458, upload-time = "2026-03-09T13:01:13.689Z" }, + { url = "https://files.pythonhosted.org/packages/46/27/47598e701d284497216bf97bf8b6a69f5e61412e716c232ff2b7e6cb2100/pyqt6_sip-13.11.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ba9d362dd1e54b43bc2594f8841e1e39d24789716d28f08e5c9282af9fca342c", size = 112564, upload-time = "2026-03-09T13:01:14.628Z" }, + { url = "https://files.pythonhosted.org/packages/95/cb/116f9b328636765f3bce97d9e10ec041c54bbe92beb0617edb86c2b615c1/pyqt6_sip-13.11.1-cp312-cp312-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0df15849946cea969d3ff2b24b76149262b6044aea2c5403e4f70c24c973a4c8", size = 299564, upload-time = "2026-03-09T13:01:17.292Z" }, + { url = "https://files.pythonhosted.org/packages/1b/be/fe2321285e8f683e705d199dbb458131f1850dc5966155a19c40100c85bb/pyqt6_sip-13.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52b2b27fc77d9447a8dc1c6de1aaccc22d41e48697aafb2f2f20b8984bb02a5", size = 321210, upload-time = "2026-03-09T13:01:15.904Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9b/7d4b10f9cba1b6f581dfb4860b9d11898da55a5ed3b8a6e7a1bf9f7084d0/pyqt6_sip-13.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:1d1c67179c1924b28e3d7f04585639e7a7c0946f62390efc6ccf2a6206e595d3", size = 53351, upload-time = "2026-03-09T13:01:19.327Z" }, + { url = "https://files.pythonhosted.org/packages/06/72/6c4e6f21cafa4bed40d2b0c1563525b0d8bfcb5734493696f4cfd043b45f/pyqt6_sip-13.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:d83543125fe9fdb153e7e446c3b4d056d80ab5953644660633ab3f80e7784194", size = 48746, upload-time = "2026-03-09T13:01:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/ee/0b/dc76c463c203e630b2c6417d4d5e337e919a265ac1c10127ef413551f5de/pyqt6_sip-13.11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0c6d097aae7df312519e2b36e001bd796f6a2ce060ab8b9ed793daa8f407fe2e", size = 112552, upload-time = "2026-03-09T13:01:21.493Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e3/65b605759859d38231ce7544065d4c61f891eb7766c351318e2a0b08a473/pyqt6_sip-13.11.1-cp313-cp313-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a72f4ebdab16a8a484019ff593de90d8013d3286b678c6ba1c0bdb117f4fcb13", size = 299932, upload-time = "2026-03-09T13:01:24.912Z" }, + { url = "https://files.pythonhosted.org/packages/60/f7/c10d2dd5bf503a1de83bd163467bd323f12af016866c2814743b5b1efe1c/pyqt6_sip-13.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b68e442efc4275651bf63f2c43713e242924fd948909e31cf8f20d783ca505e9", size = 321497, upload-time = "2026-03-09T13:01:22.724Z" }, + { url = "https://files.pythonhosted.org/packages/e1/1f/e7e5ad77a76c00db5c8c1b9960f2b0672ec1978b971bb3509858cd7a9458/pyqt6_sip-13.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:ca24bfd4d5d8274e338433df9ac41930650088c00018d3313c6bd8de21772a02", size = 53371, upload-time = "2026-03-09T13:01:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/36/ef/a7acaf44980aed6fe26f1320e265db528fecb6a47ac67829c7cd011e9821/pyqt6_sip-13.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:f532144c43f2fddcccf2e25df50cdb4a744edb4ce4ba5ed2d0f2cef825197f2f", size = 48745, upload-time = "2026-03-09T13:01:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/20/1d/62c633faedef5bb3b8c7486a72e8a6466adaa2a14efcfccf85bb23426748/pyqt6_sip-13.11.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:cb931c1af45294bbe8039c5cfda184e3023f5dc766fc884964010eedd8fd85db", size = 112678, upload-time = "2026-03-09T13:01:28.15Z" }, + { url = "https://files.pythonhosted.org/packages/03/72/5a3d9ffef0caa7e1bc7a35d6300f6099bfccd1d8a485b4320ba20013a2d9/pyqt6_sip-13.11.1-cp314-cp314-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:353d613129316e9f7eda6bbe821deb7b7ffa14483499189171fd8a246873f9ac", size = 299560, upload-time = "2026-03-09T13:01:32.134Z" }, + { url = "https://files.pythonhosted.org/packages/98/f4/886f901f1e04da717a11e180ba19a9c7fc62da170966d57206006f173bda/pyqt6_sip-13.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcadd68e09ee24cdda8f8bfcba52e59c9b297055d2c450f0eb89afa61a8dc31a", size = 321846, upload-time = "2026-03-09T13:01:29.817Z" }, + { url = "https://files.pythonhosted.org/packages/96/f2/b68fd566f7f86dbb53d933489e70487cabaea0e0161690e4899653bbc7fb/pyqt6_sip-13.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:581e287bf42587593b88b30d9db06ed0fccbf40f345a5bd3ec3f00a5692e2430", size = 55055, upload-time = "2026-03-09T13:01:33.467Z" }, + { url = "https://files.pythonhosted.org/packages/8d/42/efb7ced69f7d1d31eb8f19b2d778aeb182be7e070569d02b9057ac478e3e/pyqt6_sip-13.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:42b62530a9b6a9c6e29c2941b8ab78258652da0aeae4eb1fc9a0631d19a7a7b2", size = 49597, upload-time = "2026-03-09T13:01:34.49Z" }, +] + [[package]] name = "pyright" version = "1.1.409" @@ -1606,6 +2584,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3c/26/1062c7ec1b053db9e499b4d2d5bc231743201b74051c973dadeac80a8f43/questionary-2.1.1-py3-none-any.whl", hash = "sha256:a51af13f345f1cdea62347589fbb6df3b290306ab8930713bfae4d475a7d4a59", size = 36753, upload-time = "2025-08-28T19:00:19.56Z" }, ] +[[package]] +name = "requests" +version = "2.34.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/b8/7a707d60fea4c49094e40262cc0e2ca6c768cca21587e34d3f705afec47e/requests-2.34.0.tar.gz", hash = "sha256:7d62fe92f50eb82c529b0916bb445afa1531a566fc8f35ffdc64446e771b856a", size = 142436, upload-time = "2026-05-11T19:29:51.717Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/e6/e300fce5fe83c30520607a015dabd985df3251e188d234bfe9492e17a389/requests-2.34.0-py3-none-any.whl", hash = "sha256:917520a21b767485ce7c588f4ebb917c436b24a31231b44228715eaeb5a52c60", size = 73021, upload-time = "2026-05-11T19:29:49.923Z" }, +] + +[[package]] +name = "ruamel-yaml" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/3b/ebda527b56beb90cb7652cb1c7e4f91f48649fbcd8d2eb2fb6e77cd3329b/ruamel_yaml-0.19.1.tar.gz", hash = "sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993", size = 142709, upload-time = "2026-01-02T16:50:31.84Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl", hash = "sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93", size = 118102, upload-time = "2026-01-02T16:50:29.201Z" }, +] + [[package]] name = "ruff" version = "0.15.12" @@ -1631,6 +2633,56 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821, upload-time = "2026-04-24T18:16:57.979Z" }, ] +[[package]] +name = "scikit-learn" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/92/53ea2181da8ac6bf27170191028aee7251f8f841f8d3edbfdcaf2008fde9/scikit_learn-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:146b4d36f800c013d267b29168813f7a03a43ecd2895d04861f1240b564421da", size = 8595835, upload-time = "2025-12-10T07:07:39.385Z" }, + { url = "https://files.pythonhosted.org/packages/01/18/d154dc1638803adf987910cdd07097d9c526663a55666a97c124d09fb96a/scikit_learn-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f984ca4b14914e6b4094c5d52a32ea16b49832c03bd17a110f004db3c223e8e1", size = 8080381, upload-time = "2025-12-10T07:07:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/44/226142fcb7b7101e64fdee5f49dbe6288d4c7af8abf593237b70fca080a4/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e30adb87f0cc81c7690a84f7932dd66be5bac57cfe16b91cb9151683a4a2d3b", size = 8799632, upload-time = "2025-12-10T07:07:43.899Z" }, + { url = "https://files.pythonhosted.org/packages/36/4d/4a67f30778a45d542bbea5db2dbfa1e9e100bf9ba64aefe34215ba9f11f6/scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ada8121bcb4dac28d930febc791a69f7cb1673c8495e5eee274190b73a4559c1", size = 9103788, upload-time = "2025-12-10T07:07:45.982Z" }, + { url = "https://files.pythonhosted.org/packages/89/3c/45c352094cfa60050bcbb967b1faf246b22e93cb459f2f907b600f2ceda5/scikit_learn-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:c57b1b610bd1f40ba43970e11ce62821c2e6569e4d74023db19c6b26f246cb3b", size = 8081706, upload-time = "2025-12-10T07:07:48.111Z" }, + { url = "https://files.pythonhosted.org/packages/3d/46/5416595bb395757f754feb20c3d776553a386b661658fb21b7c814e89efe/scikit_learn-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:2838551e011a64e3053ad7618dda9310175f7515f1742fa2d756f7c874c05961", size = 7688451, upload-time = "2025-12-10T07:07:49.873Z" }, + { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, + { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, + { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, + { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, + { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, + { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, + { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, + { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, + { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, + { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, + { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, + { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, + { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, + { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, + { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, + { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, + { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, + { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, + { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, + { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, + { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, +] + [[package]] name = "scipy" version = "1.17.1" @@ -1754,6 +2806,108 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "spglib" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/06/7964acb4c444191376bd87f91579475fbe7623ca943cce40cee8fb7f2c36/spglib-2.7.0.tar.gz", hash = "sha256:c40907a42c9dc45572f46740bf95412f84fb0eda30267e31665d104a4bde6627", size = 2366134, upload-time = "2025-12-29T09:48:26.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/a8/d841ae7743c58227af277f7f16aa844376fa11c426090d6ae35e7e93af76/spglib-2.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cf0ff80c01d8631ef4b9f1b78da79ff2044834e6e2d870f7f20c8579c921136", size = 910793, upload-time = "2025-12-29T09:47:32.063Z" }, + { url = "https://files.pythonhosted.org/packages/e8/02/11baf94cf682cdaafa046b72d4b2adcf944e19e2b2741454e329dedb2fc2/spglib-2.7.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7b29d2cfca6ac53e927686ca0b91257126e47f6abfa26451723a5cd40070352", size = 944977, upload-time = "2025-12-29T09:47:33.638Z" }, + { url = "https://files.pythonhosted.org/packages/ce/fa/6d1bc8f8cb08945ca8c37c95b42bf336b6b9a8a737eced1ce64f0cebe9ce/spglib-2.7.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f892ecce2dd1bc636b14a4e5bc13aabb73b008bd37a4d23636882c8971c432a0", size = 960531, upload-time = "2025-12-29T09:47:36.932Z" }, + { url = "https://files.pythonhosted.org/packages/b0/79/2fd5e33b431cd0afcdd441bd10704c11cdf74c09b721249297284e5bf0b2/spglib-2.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:468879702577124dcde0607a75396576e256f1cfa2d8fe48da4a928fbb27abc6", size = 669827, upload-time = "2025-12-29T09:47:38.47Z" }, + { url = "https://files.pythonhosted.org/packages/f7/e9/4e07c9c1bda40df54e09bd686eae0dc13d46e76a5ef4d43582971a86eb32/spglib-2.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:ceb6730a2324d0c83579c803f3782e28bd41e79bbfe0c3dfdbf30e3d3a6320e5", size = 649076, upload-time = "2025-12-29T09:47:40.367Z" }, + { url = "https://files.pythonhosted.org/packages/68/0e/36720beeca8452530e50ab8a16b91e8721e34c0f97fd25e9c4ddd8b9324b/spglib-2.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ef70132e23dfcc7ab6813742e0edab3f9906e61cd11c857f014bd5610a8bc88c", size = 911009, upload-time = "2025-12-29T09:47:42.238Z" }, + { url = "https://files.pythonhosted.org/packages/47/a0/24df91cbde6a3237d54cfb21602cc8ebb4102cd4e3ec9497c66135c2b190/spglib-2.7.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:59f134e74f7f488de4bf5579ee6a35af25cb2c478c138de664fea1e14f3efbaf", size = 946821, upload-time = "2025-12-29T09:47:44.548Z" }, + { url = "https://files.pythonhosted.org/packages/67/4c/75ac6f7ade28019b216c7333322f2886e1c0105202cd74506f530664bf26/spglib-2.7.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6913906fd9108e7bb2ce06a810513a95a82d801530f10230979bf3427bb7e771", size = 962531, upload-time = "2025-12-29T09:47:46.3Z" }, + { url = "https://files.pythonhosted.org/packages/a7/5f/4e283139af178bb445eedff281a90e66ceff1b814ace70a9d90a2197acc3/spglib-2.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d5729ff0040baae764c17249302cd99f0eb4e73449612a8c69d3e60a215f062e", size = 671111, upload-time = "2025-12-29T09:47:48.14Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b9/20e52d46e33bf69ceba4fc86602f006c06ce4ab10e3c930f4722fb270b02/spglib-2.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:54f4b6e789475384c62e759c618172707f261c0eae8017949fe4994b6b8cc779", size = 646679, upload-time = "2025-12-29T09:47:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1c/a0fe8c0523a0e7d608f49f09895e5c599329265c9bfacd269a21458b7564/spglib-2.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ab061ea6a3c3c25a1d0018b09c333c0458792036d3f45d892bd52793ed1f1bda", size = 911085, upload-time = "2025-12-29T09:47:51.606Z" }, + { url = "https://files.pythonhosted.org/packages/2a/34/cb3c522c4aaf6ce319b37bbec71d373b9e2cf0bcfe7d42c365cd6c113b4b/spglib-2.7.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be28673e90f7a6c7770f73c57e529d2bdbb373d06d26ee5e90991b548e9238aa", size = 946857, upload-time = "2025-12-29T09:47:53.059Z" }, + { url = "https://files.pythonhosted.org/packages/9e/64/3b1213f2f655ff143ed142292b47ec3f1f9bda8641e659a7e33c4cf0e8a9/spglib-2.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f627a4ed6f2396ed6e3e8eaf33a53ad143c8ffb8756a84a640f4569ac5ffa2a7", size = 962470, upload-time = "2025-12-29T09:47:54.878Z" }, + { url = "https://files.pythonhosted.org/packages/5c/3a/c51883ce739a00f9f60196f3dcb4ed91b690299a4ec64defd8ec5b2c5899/spglib-2.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:c76411bc1b96cd87c8733994747c7692512b583bb4ef89a65463ff4255221c11", size = 671073, upload-time = "2025-12-29T09:47:56.887Z" }, + { url = "https://files.pythonhosted.org/packages/35/78/3f9ec6ae93a48527dce0eceb6eeab74e6ad1fb2977adb5cbdfc03d43193c/spglib-2.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:0d8ecf030d13d67c4cc272423e5652b74eda57f86a0b118e007f6d12974cc256", size = 646711, upload-time = "2025-12-29T09:47:58.697Z" }, + { url = "https://files.pythonhosted.org/packages/1b/47/86e3c15c3e1c252bde40a794eea4742c142f23fc5f9c3d7551f083c1fa20/spglib-2.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:95e3dd7ef992ff8a88f6ef2e5909aaa60ecb479004cc1f73c1e6285d54227960", size = 911712, upload-time = "2025-12-29T09:48:01.14Z" }, + { url = "https://files.pythonhosted.org/packages/05/61/ab2447bb47fa69934adc2fc2d13f771dedd3b2fd3171c95307446c948f01/spglib-2.7.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97e0fcea2db3915bd973fdd2cc0a757b1f99bda71ce815da333d75ad1ffc3eb1", size = 947528, upload-time = "2025-12-29T09:48:03.258Z" }, + { url = "https://files.pythonhosted.org/packages/9d/69/898d9e005131b0b1c7e5dce2b79f36aeb20ec4d3a88cca596b522a0fa4df/spglib-2.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39b978c08ef2ebc0eaba833c488fc4c0f9b1fc0f50d4a8584f176741eea69376", size = 962474, upload-time = "2025-12-29T09:48:05.617Z" }, + { url = "https://files.pythonhosted.org/packages/c8/56/7b25ee5348722dc93ca245ed950f1a89f8a944906140629055f394c072a4/spglib-2.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:5f334b4b66c8aafd583fafab5b15a56e27efdd2dc6cb1064dfcd0fe59ae130f4", size = 679679, upload-time = "2025-12-29T09:48:15.393Z" }, + { url = "https://files.pythonhosted.org/packages/20/37/eda9a34f25b13e47298fa1b94cc4dfd8b0fcfc46c7d63ea046aa1bf91fe7/spglib-2.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:b032842fc223de46d2ef7d220459e1a61ed90329ac2e72818c605f1fc87451b8", size = 656403, upload-time = "2025-12-29T09:48:17.027Z" }, + { url = "https://files.pythonhosted.org/packages/39/af/1c8d0f98d07969b7fa7323d522732124d88caf4ee3b680ef59120bd7b229/spglib-2.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b7e29c796cfdadcc3857aef330acc19b9bc50c83e9911fb23b28390e7c80bae5", size = 920791, upload-time = "2025-12-29T09:48:07.085Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c6/89a3f31f831efc4108a19f110873559990b72186745cd3e151de28b256cc/spglib-2.7.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b6ca88bb6e604bc8f63efe87b3b2470c2e25f56988b775bd332cefa8866f5c5", size = 946881, upload-time = "2025-12-29T09:48:09.154Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e9/1ca63db2cebd381bd6b27ae309f25d270e70928359a6f0360db09b77894e/spglib-2.7.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50629939a9cd6fa3df5a12f6f025ceb3c78534284f875371574c360e4ccaf5e1", size = 963803, upload-time = "2025-12-29T09:48:12.478Z" }, + { url = "https://files.pythonhosted.org/packages/28/97/459b37c3802633f77c883883c75f5d4429b601ae8d930410b999c4e1dafb/spglib-2.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:cb77daaf9dd5d48d523a888f37cebd47fa63ff28dfcf1aac2b031b914f9ed55a", size = 696536, upload-time = "2025-12-29T09:48:13.885Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "stomp-py" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docopt-ng" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/9d/2eac45f75ce1f9708cf23c5361e74d0b855013d842d3c0aef64ce0667405/stomp_py-9.0.0.tar.gz", hash = "sha256:77b63fdd6cb2fb5e3d7032c5e1cde70c005f498d6096b77827efe71913196464", size = 39701, upload-time = "2026-05-12T19:05:15.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/99/b010daaf1db86ea6ff3b831e70a5484bfe9c4fbf2f5f2ad6578160c56917/stomp_py-9.0.0-py3-none-any.whl", hash = "sha256:d115c85950b92dad358d11bc361b23d23994d21ff7eef50119f487f718ea4be2", size = 44242, upload-time = "2026-05-12T19:05:16.657Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tabulate" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + [[package]] name = "tomli" version = "2.4.1" @@ -1863,6 +3017,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/12/a5eca5cde48b06a9aef319bc2cd8b5629eb1bd9207b6e3449ae009ee4021/tox_uv_bare-1.35.1-py3-none-any.whl", hash = "sha256:0b8d12d45f195a521d4f6aac5e42869f0a733c80d86575da855494444f60be74", size = 22243, upload-time = "2026-04-10T16:12:59.735Z" }, ] +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, +] + +[[package]] +name = "traitlets" +version = "5.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/22/40f55b26baeab80c2d7b3f1db0682f8954e4617fee7d90ce634022ef05c6/traitlets-5.15.0.tar.gz", hash = "sha256:4fead733f81cf1c4c938e06f8ca4633896833c9d89eff878159457f4d4392971", size = 163197, upload-time = "2026-05-06T08:05:58.016Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/da/98/a9937a969d018a23badfea0b381f66783649d48e0ea6c41923265c3cbeb3/traitlets-5.15.0-py3-none-any.whl", hash = "sha256:fb36a18867a6803deab09f3c5e0fa81bb7b26a5c9e82501c9933f759166eff40", size = 85877, upload-time = "2026-05-06T08:05:55.853Z" }, +] + [[package]] name = "types-mock" version = "5.2.0.20260408" @@ -1911,6 +3086,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/5e/f1e1dd319e35e962a4e00b33150a8868b6329cc1d19fd533436ba5488f09/uncertainties-3.2.3-py3-none-any.whl", hash = "sha256:313353900d8f88b283c9bad81e7d2b2d3d4bcc330cbace35403faaed7e78890a", size = 60118, upload-time = "2025-04-21T19:58:26.864Z" }, ] +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + [[package]] name = "uv" version = "0.11.7" @@ -1961,18 +3145,50 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189, upload-time = "2026-02-06T19:19:39.646Z" }, ] +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "widgetsnbextension" +version = "4.0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/f4/c67440c7fb409a71b7404b7aefcd7569a9c0d6bd071299bf4198ae7a5d95/widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9", size = 1097402, upload-time = "2025-11-01T21:15:55.178Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, +] + [[package]] name = "xrpd-toolbox" source = { editable = "." } dependencies = [ + { name = "dans-diffraction" }, + { name = "gql" }, { name = "h5py" }, + { name = "ipywidgets" }, { name = "lmfit" }, { name = "matplotlib" }, + { name = "numba" }, { name = "numpy" }, + { name = "numpydantic" }, { name = "pandas" }, { name = "peakutils" }, + { name = "pycifrw" }, + { name = "pydantic" }, { name = "pyfai" }, + { name = "pymatgen" }, + { name = "pyqt6" }, + { name = "pyyaml" }, + { name = "scikit-learn" }, { name = "scipy" }, + { name = "spglib" }, + { name = "stomp-py" }, + { name = "toml" }, ] [package.dev-dependencies] @@ -1989,14 +3205,28 @@ dev = [ [package.metadata] requires-dist = [ + { name = "dans-diffraction" }, + { name = "gql" }, { name = "h5py" }, + { name = "ipywidgets" }, { name = "lmfit" }, { name = "matplotlib" }, + { name = "numba" }, { name = "numpy" }, + { name = "numpydantic" }, { name = "pandas" }, { name = "peakutils" }, + { name = "pycifrw" }, + { name = "pydantic" }, { name = "pyfai" }, + { name = "pymatgen" }, + { name = "pyqt6" }, + { name = "pyyaml" }, + { name = "scikit-learn" }, { name = "scipy" }, + { name = "spglib" }, + { name = "stomp-py" }, + { name = "toml" }, ] [package.metadata.requires-dev] @@ -2010,3 +3240,125 @@ dev = [ { name = "tox-uv" }, { name = "types-mock" }, ] + +[[package]] +name = "yarl" +version = "1.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/aa/60da938b8f0997ba3a911263c40d82b6f645a67902a490b46f3355e10fae/yarl-1.23.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b35d13d549077713e4414f927cdc388d62e543987c572baee613bf82f11a4b99", size = 123641, upload-time = "2026-03-01T22:04:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/24/84/e237607faf4e099dbb8a4f511cfd5efcb5f75918baad200ff7380635631b/yarl-1.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbb0fef01f0c6b38cb0f39b1f78fc90b807e0e3c86a7ff3ce74ad77ce5c7880c", size = 86248, upload-time = "2026-03-01T22:04:44.757Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0d/71ceabc14c146ba8ee3804ca7b3d42b1664c8440439de5214d366fec7d3a/yarl-1.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc52310451fc7c629e13c4e061cbe2dd01684d91f2f8ee2821b083c58bd72432", size = 85988, upload-time = "2026-03-01T22:04:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6c/4a90d59c572e46b270ca132aca66954f1175abd691f74c1ef4c6711828e2/yarl-1.23.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2c6b50c7b0464165472b56b42d4c76a7b864597007d9c085e8b63e185cf4a7a", size = 100566, upload-time = "2026-03-01T22:04:47.639Z" }, + { url = "https://files.pythonhosted.org/packages/49/fb/c438fb5108047e629f6282a371e6e91cf3f97ee087c4fb748a1f32ceef55/yarl-1.23.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:aafe5dcfda86c8af00386d7781d4c2181b5011b7be3f2add5e99899ea925df05", size = 92079, upload-time = "2026-03-01T22:04:48.925Z" }, + { url = "https://files.pythonhosted.org/packages/d9/13/d269aa1aed3e4f50a5a103f96327210cc5fa5dd2d50882778f13c7a14606/yarl-1.23.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ee33b875f0b390564c1fb7bc528abf18c8ee6073b201c6ae8524aca778e2d83", size = 108741, upload-time = "2026-03-01T22:04:50.838Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/115b16f22c37ea4437d323e472945bea97301c8ec6089868fa560abab590/yarl-1.23.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c41e021bc6d7affb3364dc1e1e5fa9582b470f283748784bd6ea0558f87f42c", size = 108099, upload-time = "2026-03-01T22:04:52.499Z" }, + { url = "https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598", size = 102678, upload-time = "2026-03-01T22:04:55.176Z" }, + { url = "https://files.pythonhosted.org/packages/85/59/cd98e556fbb2bf8fab29c1a722f67ad45c5f3447cac798ab85620d1e70af/yarl-1.23.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2af5c81a1f124609d5f33507082fc3f739959d4719b56877ab1ee7e7b3d602b", size = 100803, upload-time = "2026-03-01T22:04:56.588Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c0/b39770b56d4a9f0bb5f77e2f1763cd2d75cc2f6c0131e3b4c360348fcd65/yarl-1.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6b41389c19b07c760c7e427a3462e8ab83c4bb087d127f0e854c706ce1b9215c", size = 100163, upload-time = "2026-03-01T22:04:58.492Z" }, + { url = "https://files.pythonhosted.org/packages/e7/64/6980f99ab00e1f0ff67cb84766c93d595b067eed07439cfccfc8fb28c1a6/yarl-1.23.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1dc702e42d0684f42d6519c8d581e49c96cefaaab16691f03566d30658ee8788", size = 93859, upload-time = "2026-03-01T22:05:00.268Z" }, + { url = "https://files.pythonhosted.org/packages/38/69/912e6c5e146793e5d4b5fe39ff5b00f4d22463dfd5a162bec565ac757673/yarl-1.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e40111274f340d32ebcc0a5668d54d2b552a6cca84c9475859d364b380e3222", size = 108202, upload-time = "2026-03-01T22:05:02.273Z" }, + { url = "https://files.pythonhosted.org/packages/59/97/35ca6767524687ad64e5f5c31ad54bc76d585585a9fcb40f649e7e82ffed/yarl-1.23.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:4764a6a7588561a9aef92f65bda2c4fb58fe7c675c0883862e6df97559de0bfb", size = 99866, upload-time = "2026-03-01T22:05:03.597Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1c/1a3387ee6d73589f6f2a220ae06f2984f6c20b40c734989b0a44f5987308/yarl-1.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:03214408cfa590df47728b84c679ae4ef00be2428e11630277be0727eba2d7cc", size = 107852, upload-time = "2026-03-01T22:05:04.986Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b8/35c0750fcd5a3f781058bfd954515dd4b1eab45e218cbb85cf11132215f1/yarl-1.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:170e26584b060879e29fac213e4228ef063f39128723807a312e5c7fec28eff2", size = 102919, upload-time = "2026-03-01T22:05:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1c/9a1979aec4a81896d597bcb2177827f2dbee3f5b7cc48b2d0dadb644b41d/yarl-1.23.0-cp311-cp311-win32.whl", hash = "sha256:51430653db848d258336cfa0244427b17d12db63d42603a55f0d4546f50f25b5", size = 82602, upload-time = "2026-03-01T22:05:08.444Z" }, + { url = "https://files.pythonhosted.org/packages/93/22/b85eca6fa2ad9491af48c973e4c8cf6b103a73dbb271fe3346949449fca0/yarl-1.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf49a3ae946a87083ef3a34c8f677ae4243f5b824bfc4c69672e72b3d6719d46", size = 87461, upload-time = "2026-03-01T22:05:10.145Z" }, + { url = "https://files.pythonhosted.org/packages/93/95/07e3553fe6f113e6864a20bdc53a78113cda3b9ced8784ee52a52c9f80d8/yarl-1.23.0-cp311-cp311-win_arm64.whl", hash = "sha256:b39cb32a6582750b6cc77bfb3c49c0f8760dc18dc96ec9fb55fbb0f04e08b928", size = 82336, upload-time = "2026-03-01T22:05:11.554Z" }, + { url = "https://files.pythonhosted.org/packages/88/8a/94615bc31022f711add374097ad4144d569e95ff3c38d39215d07ac153a0/yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860", size = 124737, upload-time = "2026-03-01T22:05:12.897Z" }, + { url = "https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069", size = 87029, upload-time = "2026-03-01T22:05:14.376Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25", size = 86310, upload-time = "2026-03-01T22:05:15.71Z" }, + { url = "https://files.pythonhosted.org/packages/99/30/58260ed98e6ff7f90ba84442c1ddd758c9170d70327394a6227b310cd60f/yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8", size = 97587, upload-time = "2026-03-01T22:05:17.384Z" }, + { url = "https://files.pythonhosted.org/packages/76/0a/8b08aac08b50682e65759f7f8dde98ae8168f72487e7357a5d684c581ef9/yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072", size = 92528, upload-time = "2026-03-01T22:05:18.804Z" }, + { url = "https://files.pythonhosted.org/packages/52/07/0b7179101fe5f8385ec6c6bb5d0cb9f76bd9fb4a769591ab6fb5cdbfc69a/yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8", size = 105339, upload-time = "2026-03-01T22:05:20.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/36d82869ab5ec829ca8574dfcb92b51286fcfb1e9c7a73659616362dc880/yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7", size = 105061, upload-time = "2026-03-01T22:05:22.268Z" }, + { url = "https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51", size = 100132, upload-time = "2026-03-01T22:05:23.638Z" }, + { url = "https://files.pythonhosted.org/packages/cf/26/9c89acf82f08a52cb52d6d39454f8d18af15f9d386a23795389d1d423823/yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67", size = 99289, upload-time = "2026-03-01T22:05:25.749Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/5b0db00d2cb056922356104468019c0a132e89c8d3ab67d8ede9f4483d2a/yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7", size = 96950, upload-time = "2026-03-01T22:05:27.318Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/10fa93811fd439341fad7e0718a86aca0de9548023bbb403668d6555acab/yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d", size = 93960, upload-time = "2026-03-01T22:05:28.738Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d2/8ae2e6cd77d0805f4526e30ec43b6f9a3dfc542d401ac4990d178e4bf0cf/yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760", size = 104703, upload-time = "2026-03-01T22:05:30.438Z" }, + { url = "https://files.pythonhosted.org/packages/2f/0c/b3ceacf82c3fe21183ce35fa2acf5320af003d52bc1fcf5915077681142e/yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2", size = 98325, upload-time = "2026-03-01T22:05:31.835Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e0/12900edd28bdab91a69bd2554b85ad7b151f64e8b521fe16f9ad2f56477a/yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86", size = 105067, upload-time = "2026-03-01T22:05:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/15/61/74bb1182cf79c9bbe4eb6b1f14a57a22d7a0be5e9cedf8e2d5c2086474c3/yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34", size = 100285, upload-time = "2026-03-01T22:05:35.4Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/cd5ef733f2550de6241bd8bd8c3febc78158b9d75f197d9c7baa113436af/yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d", size = 82359, upload-time = "2026-03-01T22:05:36.811Z" }, + { url = "https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e", size = 87674, upload-time = "2026-03-01T22:05:38.171Z" }, + { url = "https://files.pythonhosted.org/packages/d2/35/aeab955d6c425b227d5b7247eafb24f2653fedc32f95373a001af5dfeb9e/yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9", size = 81879, upload-time = "2026-03-01T22:05:40.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" }, + { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" }, + { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" }, + { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" }, + { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" }, + { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" }, + { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" }, + { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" }, + { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" }, + { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" }, + { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" }, + { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" }, + { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" }, + { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" }, + { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" }, + { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" }, + { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" }, + { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" }, + { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" }, + { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" }, + { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" }, + { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" }, + { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" }, + { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" }, + { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" }, + { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" }, + { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" }, + { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" }, + { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" }, + { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" }, + { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" }, + { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" }, + { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" }, + { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" }, + { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" }, + { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" }, + { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" }, + { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" }, + { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" }, + { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" }, + { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" }, + { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" }, + { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" }, + { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" }, + { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" }, + { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" }, + { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" }, + { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" }, + { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, +]