├── .gitattributes ├── .gitignore ├── Clustering_Cyclohexanes.ipynb ├── Dimensionality_Reduction_Cyclohexane.ipynb ├── LICENSE ├── README.md ├── Surface_analysis.ipynb ├── cyclohexane_data ├── MD │ ├── boat.xyz │ ├── boat │ │ └── boat.in │ ├── chair.xyz │ ├── chair │ │ └── chair.in │ ├── half-chair.xyz │ ├── half-chair │ │ └── half-chair.in │ ├── planar.xyz │ ├── planar │ │ ├── input_tmp.in │ │ └── planar.in │ ├── twist-boat.xyz │ └── twist-boat │ │ └── twist-boat.in ├── autocorr_time.py ├── conformers │ ├── boat.xyz │ ├── chair.xyz │ ├── half-chair.xyz │ ├── planar.xyz │ └── twist-boat.xyz └── export_trajectory.py ├── figures ├── Figure1 │ ├── .ipynb_checkpoints │ │ ├── Compile-checkpoint.ipynb │ │ └── GenerateElements-checkpoint.ipynb │ ├── GenerateElements.ipynb │ ├── Z_matrix.eps │ ├── adjacency_matrix.eps │ ├── bonds.pdf │ ├── bonds.png │ ├── cn00.cn`00.eps │ ├── cn00.eps │ ├── positions.pdf │ └── positions.png ├── Figure2.ai ├── Figure2.ipynb ├── Figure2.pdf ├── Figure3.ipynb ├── Figure3.pdf ├── Figure5.ai ├── Figure5.pdf ├── Figure5 │ ├── energy.png │ ├── kpca.png │ ├── kpcovr.png │ ├── pca.png │ ├── pcovr.png │ ├── tsne.png │ └── umap.png ├── Figure6.pdf └── Figure7.png ├── surface_analysis_data └── Mn2In4O8_mp-35162.cif └── utils.py /.gitattributes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/.gitattributes -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *__pycache__* 2 | *md.in* 3 | *DS_Store* 4 | *md.out* 5 | *Untitled* 6 | *final.xyz* 7 | *ipynb_checkpoints* 8 | cyclohexane_data/* 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Rose K. Cersonsky 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # unsupervised-ml 2 | This git repository will serve as a companion to a forthcoming chapter in "Quantum Chemistry in the Age of Machine Learning" 3 | -------------------------------------------------------------------------------- /cyclohexane_data/MD/boat/boat.in: -------------------------------------------------------------------------------- 1 | &CONTROL 2 | calculation = 'md' 3 | verbosity = 'high' 4 | nstep = 100000 5 | prefix = 'temp', 6 | / 7 | &SYSTEM 8 | ibrav = 0, 9 | nat = 18, 10 | ntyp = 2, 11 | ecutwfc = 60.0D0, 12 | nosym=.true. 13 | / 14 | &ELECTRONS 15 | conv_thr = 1.D-6, 16 | electron_maxstep = 300, 17 | / 18 | &IONS 19 | ion_temperature = 'andersen', 20 | tempw = 300, 21 | / 22 | &CELL 23 | / 24 | ATOMIC_SPECIES 25 | H 1.0079 H.pbe-tm-new-gipaw-dc.UPF 26 | C 12.0107 C.pbe-tm-new-gipaw-dc.UPF 27 | ATOMIC_POSITIONS angstrom 28 | C 6.361800499999999 5.0 4.5775441666666685 29 | C 5.767099999999999 6.2645 5.204344666666668 30 | C 4.2329 6.2645 5.204344666666668 31 | C 3.6381995 5.0 4.5775441666666685 32 | C 4.2329 3.7355 5.204344666666668 33 | C 5.767099999999999 3.7355 5.204344666666668 34 | H 7.4577995 5.0 4.733044666666668 35 | H 6.1665005 5.0 3.4879441666666677 36 | H 6.1349 7.1469995 4.646344666666669 37 | H 6.1221005 6.3443000000000005 6.250044166666668 38 | H 3.8651 7.1469995 4.646344666666669 39 | H 3.8778995 6.3443000000000005 6.250044166666668 40 | H 3.8334995000000003 5.0 3.4879441666666677 41 | H 2.5422005 5.0 4.733044666666668 42 | H 3.8651 2.8530005000000003 4.646344666666669 43 | H 3.8778995 3.6557000000000004 6.250044166666668 44 | H 6.1221005 3.6557000000000004 6.250044166666668 45 | H 6.1349 2.8530005000000003 4.646344666666669 46 | 47 | CELL_PARAMETERS angstrom 48 | 10.0 0.0 0.0 49 | 0.0 10.0 0.0 50 | 0.0 0.0 10.0 -------------------------------------------------------------------------------- /cyclohexane_data/MD/chair.xyz: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:14acc4c6ddcfdb705875a2bdf9e52ca132c3b0db2272d7b74ddab7cbcbef2cbc 3 | size 30592260 4 | -------------------------------------------------------------------------------- /cyclohexane_data/MD/chair/chair.in: -------------------------------------------------------------------------------- 1 | &CONTROL 2 | calculation = 'md' 3 | verbosity = 'high' 4 | nstep = 100000 5 | prefix = 'temp', 6 | / 7 | &SYSTEM 8 | ibrav = 0, 9 | nat = 18, 10 | ntyp = 2, 11 | ecutwfc = 60.0D0, 12 | nosym=.true. 13 | / 14 | &ELECTRONS 15 | conv_thr = 1.D-6, 16 | electron_maxstep = 300, 17 | / 18 | &IONS 19 | ion_temperature = 'andersen', 20 | tempw = 300, 21 | / 22 | &CELL 23 | / 24 | ATOMIC_SPECIES 25 | H 1.0079 H.pbe-tm-new-gipaw-dc.UPF 26 | C 12.0107 C.pbe-tm-new-gipaw-dc.UPF 27 | ATOMIC_POSITIONS angstrom 28 | C 6.442505833333334 5.004201749999999 4.744961750000002 29 | C 5.717537833333333 6.25134525 5.255014250000002 30 | C 4.275091333333333 6.24712875 4.7449737500000015 31 | C 3.557527333333333 4.99575825 5.255014250000002 32 | C 4.282447333333333 3.7486972499999993 4.744994750000002 33 | C 5.724899833333334 3.752915249999999 5.2550352500000015 34 | H 6.442526833333334 5.00427825 3.655031750000002 35 | H 7.470157333333333 5.00723325 5.108315750000002 36 | H 5.717575333333333 6.251271749999999 6.345025250000003 37 | H 6.228797833333333 7.14284475 4.891741250000002 38 | H 6.241360333333333 2.8644367499999994 4.891696250000002 39 | H 5.7248728333333325 3.752835749999999 6.344966750000001 40 | H 3.758624833333333 7.13560575 5.108312750000002 41 | H 4.275160333333333 6.247122749999999 3.6550107500000015 42 | H 3.557458333333333 4.99576425 6.344977250000001 43 | H 2.5298758333333327 4.992728249999999 4.891660250000002 44 | H 4.282393333333333 3.7486342499999994 3.6550002500000023 45 | H 3.771187333333333 2.857197749999999 5.108267750000002 46 | 47 | CELL_PARAMETERS angstrom 48 | 10.0 0.0 0.0 49 | 0.0 10.0 0.0 50 | 0.0 0.0 10.0 -------------------------------------------------------------------------------- /cyclohexane_data/MD/half-chair.xyz: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e8c83a71ff7a91299d0096645a876c9b0c5420fc164f43c1c1c75ac77df61268 3 | size 30592365 4 | -------------------------------------------------------------------------------- /cyclohexane_data/MD/half-chair/half-chair.in: -------------------------------------------------------------------------------- 1 | &CONTROL 2 | calculation = 'md' 3 | verbosity = 'high' 4 | nstep = 100000 5 | prefix = 'temp', 6 | / 7 | &SYSTEM 8 | ibrav = 0, 9 | nat = 18, 10 | ntyp = 2, 11 | ecutwfc = 60.0D0, 12 | nosym=.true. 13 | / 14 | &ELECTRONS 15 | conv_thr = 1.D-6, 16 | electron_maxstep = 300, 17 | / 18 | &IONS 19 | ion_temperature = 'andersen', 20 | tempw = 300, 21 | / 22 | &CELL 23 | / 24 | ATOMIC_SPECIES 25 | H 1.0079 H.pbe-tm-new-gipaw-dc.UPF 26 | C 12.0107 C.pbe-tm-new-gipaw-dc.UPF 27 | ATOMIC_POSITIONS angstrom 28 | C 6.4983005 5.063956166666668 5.120300000000001 29 | C 5.674299499999999 6.253855166666668 4.639200500000001 30 | C 4.325700499999999 6.253855166666668 5.3607995000000015 31 | C 3.501699499999999 5.063956166666668 4.8797000000000015 32 | C 4.2483995 3.732055166666668 4.8614000000000015 33 | C 5.7516004999999994 3.732055166666668 5.138600000000001 34 | H 6.835500499999999 5.279356166666668 6.153099500000001 35 | H 7.4022005 4.963855166666668 4.489100000000001 36 | H 5.5133 6.1914551666666675 3.545600000000001 37 | H 6.224899999999999 7.186055666666668 4.870100000000002 38 | H 3.7750999999999992 7.186055666666668 5.129900000000001 39 | H 4.486699999999999 6.1914551666666675 6.454400000000001 40 | H 3.1644995 5.279356166666668 3.846900500000001 41 | H 2.5977995 4.963855166666668 5.5109 42 | H 4.086600499999999 3.2758556666666676 3.865100000000001 43 | H 3.7746994999999997 3.053555666666668 5.5973000000000015 44 | H 5.9133995 3.2758556666666676 6.134900000000001 45 | H 6.225300499999999 3.053555666666668 4.402700000000001 46 | 47 | CELL_PARAMETERS angstrom 48 | 10.0 0.0 0.0 49 | 0.0 10.0 0.0 50 | 0.0 0.0 10.0 -------------------------------------------------------------------------------- /cyclohexane_data/MD/planar.xyz: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:04b90badcf0465038e15da11808d7b8c203b8312382c0209878350cc7fe5bdad 3 | size 30592218 4 | -------------------------------------------------------------------------------- /cyclohexane_data/MD/planar/input_tmp.in: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/cyclohexane_data/MD/planar/input_tmp.in -------------------------------------------------------------------------------- /cyclohexane_data/MD/planar/planar.in: -------------------------------------------------------------------------------- 1 | &CONTROL 2 | calculation = 'md' 3 | verbosity = 'high' 4 | nstep = 100000 5 | prefix = 'temp', 6 | / 7 | &SYSTEM 8 | ibrav = 0, 9 | nat = 18, 10 | ntyp = 2, 11 | ecutwfc = 60.0D0, 12 | nosym=.true. 13 | / 14 | &ELECTRONS 15 | conv_thr = 1.D-6, 16 | electron_maxstep = 300, 17 | / 18 | &IONS 19 | ion_temperature = 'andersen', 20 | tempw = 300, 21 | / 22 | &CELL 23 | / 24 | ATOMIC_SPECIES 25 | H 1.0079 H.pbe-tm-new-gipaw-dc.UPF 26 | C 12.0107 C.pbe-tm-new-gipaw-dc.UPF 27 | ATOMIC_POSITIONS angstrom 28 | C 6.5138 4.999999999999998 5.0 29 | C 5.7569 6.310999999999998 5.0 30 | C 4.2431 6.310999999999998 5.0 31 | C 3.4862 4.999999999999998 5.0 32 | C 4.2431 3.6889999999999983 5.0 33 | C 5.7569 3.6889999999999983 5.0 34 | H 7.182399500000001 4.999999999999998 5.8832 35 | H 7.182399500000001 4.999999999999998 4.1168 36 | H 6.091200499999999 6.889999999999999 4.1168 37 | H 6.091200499999999 6.889999999999999 5.8832 38 | H 3.9087994999999998 6.889999999999999 4.1168 39 | H 3.9087994999999998 6.889999999999999 5.8832 40 | H 2.8176005 4.999999999999998 4.1168 41 | H 2.8176005 4.999999999999998 5.8832 42 | H 3.9087994999999998 3.1099999999999985 4.1168 43 | H 3.9087994999999998 3.1099999999999985 5.8832 44 | H 6.091200499999999 3.1099999999999985 5.8832 45 | H 6.091200499999999 3.1099999999999985 4.1168 46 | 47 | CELL_PARAMETERS angstrom 48 | 10.0 0.0 0.0 49 | 0.0 10.0 0.0 50 | 0.0 0.0 10.0 -------------------------------------------------------------------------------- /cyclohexane_data/MD/twist-boat.xyz: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:23665c0ab2a2f353c1f3be1f48b780c81f7b316508c36317688cffe98f5542b0 3 | size 30592548 4 | -------------------------------------------------------------------------------- /cyclohexane_data/MD/twist-boat/twist-boat.in: -------------------------------------------------------------------------------- 1 | &CONTROL 2 | calculation = 'md' 3 | verbosity = 'high' 4 | nstep = 100000 5 | prefix = 'temp', 6 | / 7 | &SYSTEM 8 | ibrav = 0, 9 | nat = 18, 10 | ntyp = 2, 11 | ecutwfc = 60.0D0, 12 | nosym=.true. 13 | / 14 | &ELECTRONS 15 | conv_thr = 1.D-6, 16 | electron_maxstep = 300, 17 | / 18 | &IONS 19 | ion_temperature = 'andersen', 20 | tempw = 300, 21 | / 22 | &CELL 23 | / 24 | ATOMIC_SPECIES 25 | H 1.0079 H.pbe-tm-new-gipaw-dc.UPF 26 | C 12.0107 C.pbe-tm-new-gipaw-dc.UPF 27 | ATOMIC_POSITIONS angstrom 28 | C 6.5181995 4.999999999999998 5.000000000000002 29 | C 5.666199499999999 6.221199499999999 5.376099500000001 30 | C 4.3338005 6.221199499999999 4.623900500000002 31 | C 3.4818005000000003 4.999999999999998 5.000000000000002 32 | C 4.3338005 3.7788004999999982 5.376099500000001 33 | C 5.666199499999999 3.7788004999999982 4.623900500000002 34 | H 7.166100500000001 4.747599499999998 5.8614995000000025 35 | H 7.166100500000001 5.2524004999999985 4.138500500000002 36 | H 6.2304995000000005 7.143799999999999 5.140700000000002 37 | H 5.462 6.202699999999998 6.4643000000000015 38 | H 4.538 6.202699999999998 3.535700000000002 39 | H 3.7695005000000004 7.143799999999999 4.859300000000002 40 | H 2.8338995000000002 4.747599499999998 4.138500500000002 41 | H 2.8338995000000002 5.2524004999999985 5.8614995000000025 42 | H 3.7695005000000004 2.8561999999999985 5.140700000000002 43 | H 4.538 3.797299999999998 6.4643000000000015 44 | H 6.2304995000000005 2.8561999999999985 4.859300000000002 45 | H 5.462 3.797299999999998 3.535700000000002 46 | 47 | CELL_PARAMETERS angstrom 48 | 10.0 0.0 0.0 49 | 0.0 10.0 0.0 50 | 0.0 0.0 10.0 -------------------------------------------------------------------------------- /cyclohexane_data/autocorr_time.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from ase.io import read, write 3 | import argparse 4 | 5 | parser = argparse.ArgumentParser( 6 | description="Determine the decorrelated frames of a simulation" 7 | ) 8 | parser.add_argument( 9 | "-f", 10 | "--filename", 11 | metavar="f", 12 | type=str, 13 | nargs="+", 14 | help="filename to read", 15 | default="trajectory.xyz", 16 | ) 17 | parser.add_argument( 18 | "-t", 19 | "--threshold", 20 | metavar="T", 21 | type=float, 22 | nargs=1, 23 | help="threshold to determine tao", 24 | default=None, 25 | ) 26 | 27 | args = parser.parse_args() 28 | 29 | traj = read(args.filename, ":") 30 | energy = np.array([a.info["energy_eV"] for a in traj]) 31 | 32 | 33 | def autocorr(x): 34 | ac = np.zeros(len(x) // 2) 35 | xm = np.mean(x) 36 | for k in range(len(x) // 2): 37 | ac[k] = ( 38 | sum([(x[i] - xm) * (x[i + k] - xm) for i in range(len(x) - k)]) 39 | / sum([(x[i] - xm) for i in range(len(x) - k)]) ** 2 40 | ) 41 | return ac 42 | 43 | 44 | ace = autocorr(energy) 45 | 46 | if args.threshold is not None: 47 | ac_thresh = args.threshold 48 | else: 49 | from matplotlib import pyplot as plt 50 | 51 | plt.loglog(ace) 52 | plt.show() 53 | 54 | ac_thresh = float(input("Threshold?\t")) 55 | tao = np.where(ace < ac_thresh)[0][0] 56 | 57 | ac_frames = traj[::tao] 58 | 59 | write("ac_trajectory.xyz", traj[::tao]) 60 | -------------------------------------------------------------------------------- /cyclohexane_data/conformers/boat.xyz: -------------------------------------------------------------------------------- 1 | 18 2 | Lattice="14.99999999685098 0.0 0.0 0.0 14.99999999685098 0.0 0.0 0.0 14.99999999685098" Properties=species:S:1:pos:R:3:forces_eV_per_au:R:3:forces:R:3 energy_eV=-1124.2066926686875 energy=-1124.2066926686875 free_energy=-1124.2066926686875 pbc="T T T" 3 | C 8.85748200 7.49568150 7.08618150 0.29036059 0.00087957 -0.04433945 0.29036059 0.00087957 -0.04433945 4 | C 8.26278150 8.76018150 7.71298200 0.53194659 0.28734906 0.02454067 0.53194659 0.28734906 0.02454067 5 | C 6.72858150 8.76018150 7.71298200 -0.52927136 0.28652451 0.02416580 -0.52927136 0.28652451 0.02416580 6 | C 6.13388100 7.49568150 7.08618150 -0.29316258 -0.00065897 -0.04298730 -0.29316258 -0.00065897 -0.04298730 7 | C 6.72858150 6.23118150 7.71298200 -0.52865146 -0.28735523 0.02400459 -0.52865146 -0.28735523 0.02400459 8 | C 8.26278150 6.23118150 7.71298200 0.53079705 -0.28856725 0.02430695 0.53079705 -0.28856725 0.02430695 9 | H 9.95348100 7.49568150 7.24168200 -0.18049633 0.00015581 -0.20988455 -0.18049633 0.00015581 -0.20988455 10 | H 8.66218200 7.49568150 5.99658150 0.11268657 0.00015272 0.14811277 0.11268657 0.00015272 0.14811277 11 | H 8.63058150 9.64268100 7.15498200 0.05568238 -0.12915294 0.25685141 0.05568238 -0.12915294 0.25685141 12 | H 8.61778200 8.83998150 8.75868150 0.09266024 0.05178742 -0.22840164 0.09266024 0.05178742 -0.22840164 13 | H 6.36078150 9.64268100 7.15498200 -0.05600634 -0.12917839 0.25685912 -0.05600634 -0.12917839 0.25685912 14 | H 6.37358100 8.83998150 8.75868150 -0.09298292 0.05178305 -0.22842632 -0.09298292 0.05178305 -0.22842632 15 | H 6.32918100 7.49568150 5.99658150 -0.11303984 0.00014810 0.14816059 -0.11303984 0.00014810 0.14816059 16 | H 5.03788200 7.49568150 7.24168200 0.18012840 0.00015092 -0.20986938 0.18012840 0.00015092 -0.20986938 17 | H 6.36078150 5.34868200 7.15498200 -0.05600223 0.12948024 0.25687095 -0.05600223 0.12948024 0.25687095 18 | H 6.37358100 6.15138150 8.75868150 -0.09298729 -0.05148557 -0.22842143 -0.09298729 -0.05148557 -0.22842143 19 | H 8.61778200 6.15138150 8.75868150 0.09266410 -0.05148428 -0.22840395 0.09266410 -0.05148428 -0.22840395 20 | H 8.63058150 5.34868200 7.15498200 0.05567415 0.12947176 0.25686195 0.05567415 0.12947176 0.25686195 21 | -------------------------------------------------------------------------------- /cyclohexane_data/conformers/chair.xyz: -------------------------------------------------------------------------------- 1 | 18 2 | Lattice="14.99999999685098 0.0 0.0 0.0 14.99999999685098 0.0 0.0 0.0 14.99999999685098" Properties=species:S:1:pos:R:3:forces_eV_per_au:R:3:forces:R:3 energy_eV=-1124.4732994674766 energy=-1124.4732994674766 free_energy=-1124.4732994674766 pbc="T T T" 3 | C 8.94250500 7.50420150 7.24496250 -0.05265079 0.00227825 0.75481470 -0.05265079 0.00227825 0.75481470 4 | C 8.21753700 8.75134500 7.75501500 -0.02463837 -0.04342902 -0.75078732 -0.02463837 -0.04342902 -0.75078732 5 | C 6.77509050 8.74712850 7.24497450 0.02524978 -0.04354960 0.75255521 0.02524978 -0.04354960 0.75255521 6 | C 6.05752650 7.49575800 7.75501500 0.05130945 0.00062426 -0.75324118 0.05130945 0.00062426 -0.75324118 7 | C 6.78244650 6.24869700 7.24499550 0.02577300 0.04153797 0.75099378 0.02577300 0.04153797 0.75099378 8 | C 8.22489900 6.25291500 7.75503600 -0.02502043 0.04219720 -0.75376080 -0.02502043 0.04219720 -0.75376080 9 | H 8.94252600 7.50427800 6.15503250 0.10877926 -0.00012136 -0.38000442 0.10877926 -0.00012136 -0.38000442 10 | H 9.97015650 7.50723300 7.60831650 0.40442733 0.00129224 -0.06997643 0.40442733 0.00129224 -0.06997643 11 | H 8.21757450 8.75127150 8.84502600 0.05399240 0.09462302 0.37743537 0.05399240 0.09462302 0.37743537 12 | H 8.72879700 9.64284450 7.39174200 0.20107261 0.35074012 0.07016103 0.20107261 0.35074012 0.07016103 13 | H 8.74135950 5.36443650 7.39169700 0.20292432 -0.34953556 0.07024537 0.20292432 -0.34953556 0.07024537 14 | H 8.22487200 6.25283550 8.84496750 0.05492776 -0.09371902 0.37990672 0.05492776 -0.09371902 0.37990672 15 | H 6.25862400 9.63560550 7.60831350 -0.20302202 0.34926225 -0.07042740 -0.20302202 0.34926225 -0.07042740 16 | H 6.77515950 8.74712250 6.15501150 -0.05507843 0.09415971 -0.37896724 -0.05507843 0.09415971 -0.37896724 17 | H 6.05745750 7.49576400 8.84497800 -0.10867385 -0.00024554 0.37894641 -0.10867385 -0.00024554 0.37894641 18 | H 5.02987500 7.49272800 7.39166100 -0.40452400 -0.00119711 0.06995792 -0.40452400 -0.00119711 0.06995792 19 | H 6.78239250 6.24863400 6.15500100 -0.05386667 -0.09412552 -0.37801490 -0.05386667 -0.09412552 -0.37801490 20 | H 6.27118650 5.35719750 7.60826850 -0.20098159 -0.35079180 -0.06983682 -0.20098159 -0.35079180 -0.06983682 21 | -------------------------------------------------------------------------------- /cyclohexane_data/conformers/half-chair.xyz: -------------------------------------------------------------------------------- 1 | 18 2 | Lattice="14.99999999685098 0.0 0.0 0.0 14.99999999685098 0.0 0.0 0.0 14.99999999685098" Properties=species:S:1:pos:R:3:forces_eV_per_au:R:3:forces:R:3 energy_eV=-1124.0062217778147 energy=-1124.0062217778147 free_energy=-1124.0062217778147 pbc="T T T" 3 | C 9.00248550 7.55558550 7.62448500 0.69034094 0.35995136 0.02831247 0.69034094 0.35995136 0.02831247 4 | C 8.17848450 8.74548450 7.14338550 0.09179610 0.30274791 0.19192411 0.09179610 0.30274791 0.19192411 5 | C 6.82988550 8.74548450 7.86498450 -0.09254994 0.30277928 -0.19257691 -0.09254994 0.30277928 -0.19257691 6 | C 6.00588450 7.55558550 7.38388500 -0.69108348 0.35965851 -0.02804328 -0.69108348 0.35965851 -0.02804328 7 | C 6.75258450 6.22368450 7.36558500 -0.54745188 -0.86593417 -0.21867798 -0.54745188 -0.86593417 -0.21867798 8 | C 8.25578550 6.22368450 7.64278500 0.54717755 -0.86413723 0.21681856 0.54717755 -0.86413723 0.21681856 9 | H 9.33968550 7.77098550 8.65728450 0.04032904 0.09882652 -0.22695385 0.04032904 0.09882652 -0.22695385 10 | H 9.90638550 7.45548450 6.99328500 -0.06734773 0.08453196 0.24712647 -0.06734773 0.08453196 0.24712647 11 | H 8.01748500 8.68308450 6.04978500 -0.01330263 0.11592718 0.11532015 -0.01330263 0.11592718 0.11532015 12 | H 8.72908500 9.67768500 7.37428500 -0.07059015 -0.13684208 -0.24072442 -0.07059015 -0.13684208 -0.24072442 13 | H 6.27928500 9.67768500 7.63408500 0.07087554 -0.13682408 0.24111394 0.07087554 -0.13682408 0.24111394 14 | H 6.99088500 8.68308450 8.95858500 0.01361425 0.11592821 -0.11497665 0.01361425 0.11592821 -0.11497665 15 | H 5.66868450 7.77098550 6.35108550 -0.04003053 0.09882935 0.22731792 -0.04003053 0.09882935 0.22731792 16 | H 5.10198450 7.45548450 8.01508500 0.06761281 0.08451653 -0.24670275 0.06761281 0.08451653 -0.24670275 17 | H 6.59078550 5.76748500 6.36928500 -0.05478018 -0.01445706 0.29668268 -0.05478018 -0.01445706 0.29668268 18 | H 6.27888450 5.54518500 8.10148500 0.06611952 0.05445854 -0.27408191 0.06611952 0.05445854 -0.27408191 19 | H 8.41758450 5.76748500 8.63908500 0.05507869 -0.01443134 -0.29635435 0.05507869 -0.01443134 -0.29635435 20 | H 8.72948550 5.54518500 6.90688500 -0.06580764 0.05447088 0.27447555 -0.06580764 0.05447088 0.27447555 21 | -------------------------------------------------------------------------------- /cyclohexane_data/conformers/planar.xyz: -------------------------------------------------------------------------------- 1 | 18 2 | Lattice="14.99999999685098 0.0 0.0 0.0 14.99999999685098 0.0 0.0 0.0 14.99999999685098" Properties=species:S:1:pos:R:3:forces_eV_per_au:R:3:forces:R:3 energy_eV=-1123.2861218924743 energy=-1123.2861218924743 free_energy=-1123.2861218924743 pbc="T T T" 3 | C 9.01380000 7.50000000 7.50000000 1.36899005 0.00000154 -0.00000000 1.36899005 0.00000154 -0.00000000 4 | C 8.25690000 8.81100000 7.50000000 0.68837816 1.18383128 0.00000000 0.68837816 1.18383128 0.00000000 5 | C 6.74310000 8.81100000 7.50000000 -0.68837970 1.18383000 -0.00000026 -0.68837970 1.18383000 -0.00000026 6 | C 5.98620000 7.50000000 7.50000000 -1.36899056 -0.00000103 0.00000000 -1.36899056 -0.00000103 0.00000000 7 | C 6.74310000 6.18900000 7.50000000 -0.68837842 -1.18383103 -0.00000026 -0.68837842 -1.18383103 -0.00000026 8 | C 8.25690000 6.18900000 7.50000000 0.68837945 -1.18383051 -0.00000051 0.68837945 -1.18383051 -0.00000051 9 | H 9.68239950 7.50000000 8.38320000 -0.03777259 0.00000000 -0.29286690 -0.03777259 0.00000000 -0.29286690 10 | H 9.68239950 7.50000000 6.61680000 -0.03777259 -0.00000000 0.29286716 -0.03777259 -0.00000000 0.29286716 11 | H 8.59120050 9.39000000 6.61680000 -0.01888604 -0.03233316 0.29249487 -0.01888604 -0.03233316 0.29249487 12 | H 8.59120050 9.39000000 8.38320000 -0.01888578 -0.03233316 -0.29249487 -0.01888578 -0.03233316 -0.29249487 13 | H 6.40879950 9.39000000 6.61680000 0.01888552 -0.03233471 0.29249615 0.01888552 -0.03233471 0.29249615 14 | H 6.40879950 9.39000000 8.38320000 0.01888527 -0.03233445 -0.29249615 0.01888527 -0.03233445 -0.29249615 15 | H 5.31760050 7.50000000 6.61680000 0.03777439 -0.00000000 0.29286973 0.03777439 -0.00000000 0.29286973 16 | H 5.31760050 7.50000000 8.38320000 0.03777439 -0.00000000 -0.29286973 0.03777439 -0.00000000 -0.29286973 17 | H 6.40879950 5.61000000 6.61680000 0.01888527 0.03233471 0.29249641 0.01888527 0.03233471 0.29249641 18 | H 6.40879950 5.61000000 8.38320000 0.01888527 0.03233471 -0.29249641 0.01888527 0.03233471 -0.29249641 19 | H 8.59120050 5.61000000 8.38320000 -0.01888578 0.03233291 -0.29249461 -0.01888578 0.03233291 -0.29249461 20 | H 8.59120050 5.61000000 6.61680000 -0.01888604 0.03233316 0.29249487 -0.01888604 0.03233316 0.29249487 21 | -------------------------------------------------------------------------------- /cyclohexane_data/conformers/twist-boat.xyz: -------------------------------------------------------------------------------- 1 | 18 2 | Lattice="14.99999999685098 0.0 0.0 0.0 14.99999999685098 0.0 0.0 0.0 14.99999999685098" Properties=species:S:1:pos:R:3:forces_eV_per_au:R:3:forces:R:3 energy_eV=-1124.2562587486264 energy=-1124.2562587486264 free_energy=-1124.2562587486264 pbc="T T T" 3 | C 9.01819950 7.50000000 7.50000000 0.42433615 -0.00000000 -0.00000000 0.42433615 -0.00000000 -0.00000000 4 | C 8.16619950 8.72119950 7.87609950 0.04701236 0.34348781 0.08377965 0.04701236 0.34348781 0.08377965 5 | C 6.83380050 8.72119950 7.12390050 -0.04701236 0.34348781 -0.08377965 -0.04701236 0.34348781 -0.08377965 6 | C 5.98180050 7.50000000 7.50000000 -0.42433615 -0.00000000 -0.00000000 -0.42433615 -0.00000000 -0.00000000 7 | C 6.83380050 6.27880050 7.87609950 -0.04701236 -0.34348781 0.08377965 -0.04701236 -0.34348781 0.08377965 8 | C 8.16619950 6.27880050 7.12390050 0.04701211 -0.34348781 -0.08377965 0.04701211 -0.34348781 -0.08377965 9 | H 9.66610050 7.24759950 8.36149950 0.01431822 0.04032364 -0.24782786 0.01431822 0.04032364 -0.24782786 10 | H 9.66610050 7.75240050 6.63850050 0.01431822 -0.04032364 0.24782786 0.01431822 -0.04032364 0.24782786 11 | H 8.73049950 9.64380000 7.64070000 -0.13198270 -0.11920431 0.23983456 -0.13198270 -0.11920431 0.23983456 12 | H 7.96200000 8.70270000 8.96430000 0.03790963 0.12579791 -0.15661926 0.03790963 0.12579791 -0.15661926 13 | H 7.03800000 8.70270000 6.03570000 -0.03790963 0.12579791 0.15661926 -0.03790963 0.12579791 0.15661926 14 | H 6.26950050 9.64380000 7.35930000 0.13198270 -0.11920431 -0.23983456 0.13198270 -0.11920431 -0.23983456 15 | H 5.33389950 7.24759950 6.63850050 -0.01431796 0.04032364 0.24782786 -0.01431796 0.04032364 0.24782786 16 | H 5.33389950 7.75240050 8.36149950 -0.01431796 -0.04032364 -0.24782786 -0.01431796 -0.04032364 -0.24782786 17 | H 6.26950050 5.35620000 7.64070000 0.13198270 0.11920431 0.23983456 0.13198270 0.11920431 0.23983456 18 | H 7.03800000 6.29730000 8.96430000 -0.03790963 -0.12579791 -0.15661926 -0.03790963 -0.12579791 -0.15661926 19 | H 8.73049950 5.35620000 7.35930000 -0.13198270 0.11920457 -0.23983456 -0.13198270 0.11920457 -0.23983456 20 | H 7.96200000 6.29730000 6.03570000 0.03790963 -0.12579791 0.15661926 0.03790963 -0.12579791 0.15661926 21 | -------------------------------------------------------------------------------- /cyclohexane_data/export_trajectory.py: -------------------------------------------------------------------------------- 1 | from ase.io import read, write 2 | import numpy as np 3 | import argparse 4 | 5 | parser = argparse.ArgumentParser( 6 | description="Export a trajectory from a QE md simulation" 7 | ) 8 | parser.add_argument( 9 | "-f", 10 | "--filename", 11 | metavar="f", 12 | type=str, 13 | nargs="+", 14 | help="filename to read", 15 | default=["md.out"], 16 | ) 17 | 18 | parser.add_argument( 19 | "-o", 20 | "--output", 21 | metavar="f", 22 | type=str, 23 | nargs="+", 24 | help="filename to export", 25 | default=["trajectory.xyz"], 26 | ) 27 | 28 | parser.add_argument("-t", "--trim", type=int, nargs=1, default=None) 29 | 30 | args = parser.parse_args() 31 | 32 | fn = args.filename[0] 33 | ofn = args.output[0] 34 | frames = read(fn, ":") 35 | 36 | if args.trim is not None: 37 | frames = frames[: args.trim[0]] 38 | 39 | for frame in frames: 40 | frame.info["energy_eV"] = frame.get_total_energy() 41 | try: 42 | frame.arrays["forces_eV_per_au"] = frame.get_forces() 43 | except RuntimeError: 44 | pass 45 | frame.positions -= np.mean(frame.positions, axis=0) 46 | frame.positions += np.diag(frame.cell) / 2 47 | 48 | print(fn, len(frames)) 49 | write(ofn, frames) 50 | -------------------------------------------------------------------------------- /figures/Figure1/.ipynb_checkpoints/Compile-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import os\n", 10 | "\n", 11 | "from matplotlib.gridspec import GridSpec\n", 12 | "import numpy as np\n", 13 | "from matplotlib import pyplot as plt\n", 14 | "from PIL import Image\n", 15 | "\n", 16 | "MEDIUM = 16\n", 17 | "SMALL = 12\n", 18 | "LARGE = 20\n", 19 | "font_params = {\n", 20 | " \"axes.labelsize\": MEDIUM,\n", 21 | " \"axes.titlesize\": LARGE,\n", 22 | " \"figure.titlesize\": LARGE,\n", 23 | " \"font.size\": MEDIUM,\n", 24 | " \"legend.fontsize\": SMALL,\n", 25 | " \"legend.title_fontsize\": SMALL,\n", 26 | " \"xtick.labelsize\": SMALL,\n", 27 | " \"ytick.labelsize\": SMALL,\n", 28 | "}\n", 29 | "for key, val in font_params.items():\n", 30 | " plt.rcParams[key] = val\n", 31 | "\n", 32 | "names = {\"C\": \"Carbon\", \"H\": \"Hydrogen\"}\n", 33 | "colors = {\"H\": (0.6, 0.6, 0.6), \"C\": (0.2, 0.2, 0.2)}\n" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": null, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "for fn in os.listdir():\n", 43 | " if fn.endswith('png'):\n", 44 | " print(fn, Image.open(fn).size)" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": null, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "Image.open('positions.png').height / Image.open('bonds.png').height" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": null, 59 | "metadata": {}, 60 | "outputs": [], 61 | "source": [ 62 | "fig = plt.figure(figsize=(14,6))\n", 63 | "gs = GridSpec(nrows=3, ncols=5, height_ratios=(1, 0.7, 1.1), width_ratios=(2,1.2,1.2, 1,1))\n", 64 | "\n", 65 | "info_panel = fig.add_subplot(gs[:, 0])\n", 66 | "# info_panel.axis('off')\n", 67 | "info_panel.set_xticks([])\n", 68 | "info_panel.set_yticks([])\n", 69 | "\n", 70 | "cart_panel = fig.add_subplot(gs[:, 1])\n", 71 | "cart_panel.imshow(Image.open('positions.png'))\n", 72 | "cart_panel.axis('off')\n", 73 | "\n", 74 | "bond_panel = fig.add_subplot(gs[2:, 2])\n", 75 | "bond_panel.imshow(Image.open('bonds.png'))\n", 76 | "bond_panel.axis('off')\n", 77 | "\n", 78 | "z_panel = fig.add_subplot(gs[:2, 2])\n", 79 | "z_panel.imshow(Image.open('Z_matrix.png'))\n", 80 | "z_panel.axis('off')\n", 81 | "\n", 82 | "c_panel = fig.add_subplot(gs[0, 3:])\n", 83 | "c_panel.imshow(Image.open('cn00.png'))\n", 84 | "c_panel.axis('off')\n", 85 | "\n", 86 | "cc_panel = fig.add_subplot(gs[1:, 3:])\n", 87 | "cc_panel.imshow(Image.open('cn00.cn`00.png'))\n", 88 | "cc_panel.axis('off')\n", 89 | "\n", 90 | "fig.subplots_adjust(wspace=0.1, hspace=0.1)\n", 91 | "fig.show()" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": null, 97 | "metadata": {}, 98 | "outputs": [], 99 | "source": [] 100 | } 101 | ], 102 | "metadata": { 103 | "kernelspec": { 104 | "display_name": "Python 3 (ipykernel)", 105 | "language": "python", 106 | "name": "python3" 107 | }, 108 | "language_info": { 109 | "codemirror_mode": { 110 | "name": "ipython", 111 | "version": 3 112 | }, 113 | "file_extension": ".py", 114 | "mimetype": "text/x-python", 115 | "name": "python", 116 | "nbconvert_exporter": "python", 117 | "pygments_lexer": "ipython3", 118 | "version": "3.9.5" 119 | } 120 | }, 121 | "nbformat": 4, 122 | "nbformat_minor": 4 123 | } 124 | -------------------------------------------------------------------------------- /figures/Figure1/bonds.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure1/bonds.pdf -------------------------------------------------------------------------------- /figures/Figure1/bonds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure1/bonds.png -------------------------------------------------------------------------------- /figures/Figure1/cn00.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Title: cn00.eps 3 | %%Creator: Matplotlib v3.4.3, https://matplotlib.org/ 4 | %%CreationDate: Tue Nov 16 18:28:36 2021 5 | %%Orientation: portrait 6 | %%BoundingBox: 18 288 594 504 7 | %%HiResBoundingBox: 18.000000 288.000000 594.000000 504.000000 8 | %%EndComments 9 | %%BeginProlog 10 | /mpldict 14 dict def 11 | mpldict begin 12 | /_d { bind def } bind def 13 | /m { moveto } _d 14 | /l { lineto } _d 15 | /r { rlineto } _d 16 | /c { curveto } _d 17 | /cl { closepath } _d 18 | /ce { closepath eofill } _d 19 | /box { 20 | m 21 | 1 index 0 r 22 | 0 exch r 23 | neg 0 r 24 | cl 25 | } _d 26 | /clipbox { 27 | box 28 | clip 29 | newpath 30 | } _d 31 | /sc { setcachedevice } _d 32 | %!PS-Adobe-3.0 Resource-Font 33 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 34 | 10 dict begin 35 | /FontName /DejaVuSans def 36 | /PaintType 0 def 37 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 38 | /FontBBox [-2090 -948 3673 2524] def 39 | /FontType 3 def 40 | /Encoding [/minus /arrowright /space /parenleft /parenright /comma /zero /one /two /four /six /eight /equal /A /C /N /a /b /e /g /h /i /l /m /n /o /r /t] def 41 | /CharStrings 29 dict dup begin 42 | /.notdef 0 def 43 | /minus{1716 0 217 557 1499 727 sc 44 | 217 727 m 45 | 1499 727 l 46 | 1499 557 l 47 | 217 557 l 48 | 217 727 l 49 | 50 | ce} _d 51 | /arrowright{1716 0 117 204 1616 1080 sc 52 | 1616 687 m 53 | 1616 597 l 54 | 1223 204 l 55 | 1103 324 l 56 | 1336 557 l 57 | 117 557 l 58 | 117 727 l 59 | 1336 727 l 60 | 1103 960 l 61 | 1223 1080 l 62 | 1616 687 l 63 | 64 | ce} _d 65 | /space{651 0 0 0 0 0 sc 66 | ce} _d 67 | /parenleft{799 0 176 -270 635 1554 sc 68 | 635 1554 m 69 | 546 1401 479 1249 436 1099 c 70 | 393 949 371 797 371 643 c 71 | 371 489 393 336 436 185 c 72 | 480 34 546 -117 635 -270 c 73 | 475 -270 l 74 | 375 -113 300 41 250 192 c 75 | 201 343 176 494 176 643 c 76 | 176 792 201 941 250 1092 c 77 | 299 1243 374 1397 475 1554 c 78 | 635 1554 l 79 | 80 | ce} _d 81 | /parenright{799 0 164 -270 623 1554 sc 82 | 164 1554 m 83 | 324 1554 l 84 | 424 1397 499 1243 548 1092 c 85 | 598 941 623 792 623 643 c 86 | 623 494 598 343 548 192 c 87 | 499 41 424 -113 324 -270 c 88 | 164 -270 l 89 | 253 -117 319 34 362 185 c 90 | 406 336 428 489 428 643 c 91 | 428 797 406 949 362 1099 c 92 | 319 1249 253 1401 164 1554 c 93 | 94 | ce} _d 95 | /comma{651 0 158 -238 451 254 sc 96 | 240 254 m 97 | 451 254 l 98 | 451 82 l 99 | 287 -238 l 100 | 158 -238 l 101 | 240 82 l 102 | 240 254 l 103 | 104 | ce} _d 105 | /zero{1303 0 135 -29 1167 1520 sc 106 | 651 1360 m 107 | 547 1360 469 1309 416 1206 c 108 | 364 1104 338 950 338 745 c 109 | 338 540 364 387 416 284 c 110 | 469 182 547 131 651 131 c 111 | 756 131 834 182 886 284 c 112 | 939 387 965 540 965 745 c 113 | 965 950 939 1104 886 1206 c 114 | 834 1309 756 1360 651 1360 c 115 | 116 | 651 1520 m 117 | 818 1520 946 1454 1034 1321 c 118 | 1123 1189 1167 997 1167 745 c 119 | 1167 494 1123 302 1034 169 c 120 | 946 37 818 -29 651 -29 c 121 | 484 -29 356 37 267 169 c 122 | 179 302 135 494 135 745 c 123 | 135 997 179 1189 267 1321 c 124 | 356 1454 484 1520 651 1520 c 125 | 126 | ce} _d 127 | /one{1303 0 225 0 1114 1493 sc 128 | 254 170 m 129 | 584 170 l 130 | 584 1309 l 131 | 225 1237 l 132 | 225 1421 l 133 | 582 1493 l 134 | 784 1493 l 135 | 784 170 l 136 | 1114 170 l 137 | 1114 0 l 138 | 254 0 l 139 | 254 170 l 140 | 141 | ce} _d 142 | /two{1303 0 150 0 1098 1520 sc 143 | 393 170 m 144 | 1098 170 l 145 | 1098 0 l 146 | 150 0 l 147 | 150 170 l 148 | 227 249 331 356 463 489 c 149 | 596 623 679 709 713 748 c 150 | 778 821 823 882 848 932 c 151 | 874 983 887 1032 887 1081 c 152 | 887 1160 859 1225 803 1275 c 153 | 748 1325 675 1350 586 1350 c 154 | 523 1350 456 1339 385 1317 c 155 | 315 1295 240 1262 160 1217 c 156 | 160 1421 l 157 | 241 1454 317 1478 388 1495 c 158 | 459 1512 523 1520 582 1520 c 159 | 737 1520 860 1481 952 1404 c 160 | 1044 1327 1090 1223 1090 1094 c 161 | 1090 1033 1078 974 1055 919 c 162 | 1032 864 991 800 930 725 c 163 | 913 706 860 650 771 557 c 164 | 682 465 556 336 393 170 c 165 | 166 | ce} _d 167 | /four{1303 0 100 0 1188 1493 sc 168 | 774 1317 m 169 | 264 520 l 170 | 774 520 l 171 | 774 1317 l 172 | 173 | 721 1493 m 174 | 975 1493 l 175 | 975 520 l 176 | 1188 520 l 177 | 1188 352 l 178 | 975 352 l 179 | 975 0 l 180 | 774 0 l 181 | 774 352 l 182 | 100 352 l 183 | 100 547 l 184 | 721 1493 l 185 | 186 | ce} _d 187 | /six{1303 0 143 -29 1174 1520 sc 188 | 676 827 m 189 | 585 827 513 796 460 734 c 190 | 407 672 381 587 381 479 c 191 | 381 372 407 287 460 224 c 192 | 513 162 585 131 676 131 c 193 | 767 131 838 162 891 224 c 194 | 944 287 971 372 971 479 c 195 | 971 587 944 672 891 734 c 196 | 838 796 767 827 676 827 c 197 | 198 | 1077 1460 m 199 | 1077 1276 l 200 | 1026 1300 975 1318 923 1331 c 201 | 872 1344 821 1350 770 1350 c 202 | 637 1350 535 1305 464 1215 c 203 | 394 1125 354 989 344 807 c 204 | 383 865 433 909 492 940 c 205 | 551 971 617 987 688 987 c 206 | 838 987 956 941 1043 850 c 207 | 1130 759 1174 636 1174 479 c 208 | 1174 326 1129 203 1038 110 c 209 | 947 17 827 -29 676 -29 c 210 | 503 -29 371 37 280 169 c 211 | 189 302 143 494 143 745 c 212 | 143 981 199 1169 311 1309 c 213 | 423 1450 573 1520 762 1520 c 214 | 813 1520 864 1515 915 1505 c 215 | 967 1495 1021 1480 1077 1460 c 216 | 217 | ce} _d 218 | /eight{1303 0 139 -29 1163 1520 sc 219 | 651 709 m 220 | 555 709 479 683 424 632 c 221 | 369 581 342 510 342 420 c 222 | 342 330 369 259 424 208 c 223 | 479 157 555 131 651 131 c 224 | 747 131 823 157 878 208 c 225 | 933 260 961 331 961 420 c 226 | 961 510 933 581 878 632 c 227 | 823 683 748 709 651 709 c 228 | 229 | 449 795 m 230 | 362 816 295 857 246 916 c 231 | 198 975 174 1048 174 1133 c 232 | 174 1252 216 1347 301 1416 c 233 | 386 1485 503 1520 651 1520 c 234 | 800 1520 916 1485 1001 1416 c 235 | 1086 1347 1128 1252 1128 1133 c 236 | 1128 1048 1104 975 1055 916 c 237 | 1007 857 940 816 854 795 c 238 | 951 772 1027 728 1081 662 c 239 | 1136 596 1163 515 1163 420 c 240 | 1163 275 1119 164 1030 87 c 241 | 942 10 816 -29 651 -29 c 242 | 486 -29 360 10 271 87 c 243 | 183 164 139 275 139 420 c 244 | 139 515 166 596 221 662 c 245 | 276 728 352 772 449 795 c 246 | 247 | 375 1114 m 248 | 375 1037 399 976 447 933 c 249 | 496 890 564 868 651 868 c 250 | 738 868 805 890 854 933 c 251 | 903 976 928 1037 928 1114 c 252 | 928 1191 903 1252 854 1295 c 253 | 805 1338 738 1360 651 1360 c 254 | 564 1360 496 1338 447 1295 c 255 | 399 1252 375 1191 375 1114 c 256 | 257 | ce} _d 258 | /equal{1716 0 217 352 1499 930 sc 259 | 217 930 m 260 | 1499 930 l 261 | 1499 762 l 262 | 217 762 l 263 | 217 930 l 264 | 265 | 217 522 m 266 | 1499 522 l 267 | 1499 352 l 268 | 217 352 l 269 | 217 522 l 270 | 271 | ce} _d 272 | /A{1401 0 16 0 1384 1493 sc 273 | 700 1294 m 274 | 426 551 l 275 | 975 551 l 276 | 700 1294 l 277 | 278 | 586 1493 m 279 | 815 1493 l 280 | 1384 0 l 281 | 1174 0 l 282 | 1038 383 l 283 | 365 383 l 284 | 229 0 l 285 | 16 0 l 286 | 586 1493 l 287 | 288 | ce} _d 289 | /C{1430 0 115 -29 1319 1520 sc 290 | 1319 1378 m 291 | 1319 1165 l 292 | 1251 1228 1178 1276 1101 1307 c 293 | 1024 1338 943 1354 856 1354 c 294 | 685 1354 555 1302 464 1197 c 295 | 373 1093 328 942 328 745 c 296 | 328 548 373 398 464 293 c 297 | 555 189 685 137 856 137 c 298 | 943 137 1024 153 1101 184 c 299 | 1178 215 1251 263 1319 326 c 300 | 1319 115 l 301 | 1248 67 1173 31 1094 7 c 302 | 1015 -17 932 -29 844 -29 c 303 | 618 -29 440 40 310 178 c 304 | 180 317 115 506 115 745 c 305 | 115 985 180 1174 310 1312 c 306 | 440 1451 618 1520 844 1520 c 307 | 933 1520 1017 1508 1096 1484 c 308 | 1175 1461 1250 1425 1319 1378 c 309 | 310 | ce} _d 311 | /N{1532 0 201 0 1331 1493 sc 312 | 201 1493 m 313 | 473 1493 l 314 | 1135 244 l 315 | 1135 1493 l 316 | 1331 1493 l 317 | 1331 0 l 318 | 1059 0 l 319 | 397 1249 l 320 | 397 0 l 321 | 201 0 l 322 | 201 1493 l 323 | 324 | ce} _d 325 | /a{1255 0 123 -29 1069 1147 sc 326 | 702 563 m 327 | 553 563 450 546 393 512 c 328 | 336 478 307 420 307 338 c 329 | 307 273 328 221 371 182 c 330 | 414 144 473 125 547 125 c 331 | 649 125 731 161 792 233 c 332 | 854 306 885 402 885 522 c 333 | 885 563 l 334 | 702 563 l 335 | 336 | 1069 639 m 337 | 1069 0 l 338 | 885 0 l 339 | 885 170 l 340 | 843 102 791 52 728 19 c 341 | 665 -13 589 -29 498 -29 c 342 | 383 -29 292 3 224 67 c 343 | 157 132 123 218 123 326 c 344 | 123 452 165 547 249 611 c 345 | 334 675 460 707 627 707 c 346 | 885 707 l 347 | 885 725 l 348 | 885 810 857 875 801 921 c 349 | 746 968 668 991 567 991 c 350 | 503 991 441 983 380 968 c 351 | 319 953 261 930 205 899 c 352 | 205 1069 l 353 | 272 1095 338 1114 401 1127 c 354 | 464 1140 526 1147 586 1147 c 355 | 748 1147 869 1105 949 1021 c 356 | 1029 937 1069 810 1069 639 c 357 | 358 | ce} _d 359 | /b{1300 0 186 -29 1188 1556 sc 360 | 997 559 m 361 | 997 694 969 800 913 877 c 362 | 858 954 781 993 684 993 c 363 | 587 993 510 954 454 877 c 364 | 399 800 371 694 371 559 c 365 | 371 424 399 317 454 240 c 366 | 510 163 587 125 684 125 c 367 | 781 125 858 163 913 240 c 368 | 969 317 997 424 997 559 c 369 | 370 | 371 950 m 371 | 410 1017 458 1066 517 1098 c 372 | 576 1131 647 1147 729 1147 c 373 | 865 1147 975 1093 1060 985 c 374 | 1145 877 1188 735 1188 559 c 375 | 1188 383 1145 241 1060 133 c 376 | 975 25 865 -29 729 -29 c 377 | 647 -29 576 -13 517 19 c 378 | 458 52 410 101 371 168 c 379 | 371 0 l 380 | 186 0 l 381 | 186 1556 l 382 | 371 1556 l 383 | 371 950 l 384 | 385 | ce} _d 386 | /e{1260 0 113 -29 1151 1147 sc 387 | 1151 606 m 388 | 1151 516 l 389 | 305 516 l 390 | 313 389 351 293 419 226 c 391 | 488 160 583 127 705 127 c 392 | 776 127 844 136 910 153 c 393 | 977 170 1043 196 1108 231 c 394 | 1108 57 l 395 | 1042 29 974 8 905 -7 c 396 | 836 -22 765 -29 694 -29 c 397 | 515 -29 374 23 269 127 c 398 | 165 231 113 372 113 549 c 399 | 113 732 162 878 261 985 c 400 | 360 1093 494 1147 662 1147 c 401 | 813 1147 932 1098 1019 1001 c 402 | 1107 904 1151 773 1151 606 c 403 | 404 | 967 660 m 405 | 966 761 937 841 882 901 c 406 | 827 961 755 991 664 991 c 407 | 561 991 479 962 417 904 c 408 | 356 846 320 764 311 659 c 409 | 967 660 l 410 | 411 | ce} _d 412 | /g{1300 0 113 -426 1114 1147 sc 413 | 930 573 m 414 | 930 706 902 810 847 883 c 415 | 792 956 715 993 616 993 c 416 | 517 993 440 956 385 883 c 417 | 330 810 303 706 303 573 c 418 | 303 440 330 337 385 264 c 419 | 440 191 517 154 616 154 c 420 | 715 154 792 191 847 264 c 421 | 902 337 930 440 930 573 c 422 | 423 | 1114 139 m 424 | 1114 -52 1072 -193 987 -286 c 425 | 902 -379 773 -426 598 -426 c 426 | 533 -426 472 -421 415 -411 c 427 | 358 -402 302 -387 248 -367 c 428 | 248 -188 l 429 | 302 -217 355 -239 408 -253 c 430 | 461 -267 514 -274 569 -274 c 431 | 690 -274 780 -242 840 -179 c 432 | 900 -116 930 -21 930 106 c 433 | 930 197 l 434 | 892 131 843 82 784 49 c 435 | 725 16 654 0 571 0 c 436 | 434 0 323 52 239 157 c 437 | 155 262 113 400 113 573 c 438 | 113 746 155 885 239 990 c 439 | 323 1095 434 1147 571 1147 c 440 | 654 1147 725 1131 784 1098 c 441 | 843 1065 892 1016 930 950 c 442 | 930 1120 l 443 | 1114 1120 l 444 | 1114 139 l 445 | 446 | ce} _d 447 | /h{1298 0 186 0 1124 1556 sc 448 | 1124 676 m 449 | 1124 0 l 450 | 940 0 l 451 | 940 670 l 452 | 940 776 919 855 878 908 c 453 | 837 961 775 987 692 987 c 454 | 593 987 514 955 457 892 c 455 | 400 829 371 742 371 633 c 456 | 371 0 l 457 | 186 0 l 458 | 186 1556 l 459 | 371 1556 l 460 | 371 946 l 461 | 415 1013 467 1064 526 1097 c 462 | 586 1130 655 1147 733 1147 c 463 | 862 1147 959 1107 1025 1027 c 464 | 1091 948 1124 831 1124 676 c 465 | 466 | ce} _d 467 | /i{569 0 193 0 377 1556 sc 468 | 193 1120 m 469 | 377 1120 l 470 | 377 0 l 471 | 193 0 l 472 | 193 1120 l 473 | 474 | 193 1556 m 475 | 377 1556 l 476 | 377 1323 l 477 | 193 1323 l 478 | 193 1556 l 479 | 480 | ce} _d 481 | /l{569 0 193 0 377 1556 sc 482 | 193 1556 m 483 | 377 1556 l 484 | 377 0 l 485 | 193 0 l 486 | 193 1556 l 487 | 488 | ce} _d 489 | /m{1995 0 186 0 1821 1147 sc 490 | 1065 905 m 491 | 1111 988 1166 1049 1230 1088 c 492 | 1294 1127 1369 1147 1456 1147 c 493 | 1573 1147 1663 1106 1726 1024 c 494 | 1789 943 1821 827 1821 676 c 495 | 1821 0 l 496 | 1636 0 l 497 | 1636 670 l 498 | 1636 777 1617 857 1579 909 c 499 | 1541 961 1483 987 1405 987 c 500 | 1310 987 1234 955 1179 892 c 501 | 1124 829 1096 742 1096 633 c 502 | 1096 0 l 503 | 911 0 l 504 | 911 670 l 505 | 911 778 892 858 854 909 c 506 | 816 961 757 987 678 987 c 507 | 584 987 509 955 454 891 c 508 | 399 828 371 742 371 633 c 509 | 371 0 l 510 | 186 0 l 511 | 186 1120 l 512 | 371 1120 l 513 | 371 946 l 514 | 413 1015 463 1065 522 1098 c 515 | 581 1131 650 1147 731 1147 c 516 | 812 1147 881 1126 938 1085 c 517 | 995 1044 1038 984 1065 905 c 518 | 519 | ce} _d 520 | /n{1298 0 186 0 1124 1147 sc 521 | 1124 676 m 522 | 1124 0 l 523 | 940 0 l 524 | 940 670 l 525 | 940 776 919 855 878 908 c 526 | 837 961 775 987 692 987 c 527 | 593 987 514 955 457 892 c 528 | 400 829 371 742 371 633 c 529 | 371 0 l 530 | 186 0 l 531 | 186 1120 l 532 | 371 1120 l 533 | 371 946 l 534 | 415 1013 467 1064 526 1097 c 535 | 586 1130 655 1147 733 1147 c 536 | 862 1147 959 1107 1025 1027 c 537 | 1091 948 1124 831 1124 676 c 538 | 539 | ce} _d 540 | /o{1253 0 113 -29 1141 1147 sc 541 | 627 991 m 542 | 528 991 450 952 393 875 c 543 | 336 798 307 693 307 559 c 544 | 307 425 335 319 392 242 c 545 | 449 165 528 127 627 127 c 546 | 725 127 803 166 860 243 c 547 | 917 320 946 426 946 559 c 548 | 946 692 917 797 860 874 c 549 | 803 952 725 991 627 991 c 550 | 551 | 627 1147 m 552 | 787 1147 913 1095 1004 991 c 553 | 1095 887 1141 743 1141 559 c 554 | 1141 376 1095 232 1004 127 c 555 | 913 23 787 -29 627 -29 c 556 | 466 -29 340 23 249 127 c 557 | 158 232 113 376 113 559 c 558 | 113 743 158 887 249 991 c 559 | 340 1095 466 1147 627 1147 c 560 | 561 | ce} _d 562 | /r{842 0 186 0 842 1147 sc 563 | 842 948 m 564 | 821 960 799 969 774 974 c 565 | 750 980 723 983 694 983 c 566 | 590 983 510 949 454 881 c 567 | 399 814 371 717 371 590 c 568 | 371 0 l 569 | 186 0 l 570 | 186 1120 l 571 | 371 1120 l 572 | 371 946 l 573 | 410 1014 460 1064 522 1097 c 574 | 584 1130 659 1147 748 1147 c 575 | 761 1147 775 1146 790 1144 c 576 | 805 1143 822 1140 841 1137 c 577 | 842 948 l 578 | 579 | ce} _d 580 | /t{803 0 55 0 754 1438 sc 581 | 375 1438 m 582 | 375 1120 l 583 | 754 1120 l 584 | 754 977 l 585 | 375 977 l 586 | 375 369 l 587 | 375 278 387 219 412 193 c 588 | 437 167 488 154 565 154 c 589 | 754 154 l 590 | 754 0 l 591 | 565 0 l 592 | 423 0 325 26 271 79 c 593 | 217 132 190 229 190 369 c 594 | 190 977 l 595 | 55 977 l 596 | 55 1120 l 597 | 190 1120 l 598 | 190 1438 l 599 | 375 1438 l 600 | 601 | ce} _d 602 | end readonly def 603 | 604 | /BuildGlyph { 605 | exch begin 606 | CharStrings exch 607 | 2 copy known not {pop /.notdef} if 608 | true 3 1 roll get exec 609 | end 610 | } _d 611 | 612 | /BuildChar { 613 | 1 index /Encoding get exch get 614 | 1 index /BuildGlyph get exec 615 | } _d 616 | 617 | FontName currentdict end definefont pop 618 | %!PS-Adobe-3.0 Resource-Font 619 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 620 | 10 dict begin 621 | /FontName /DejaVuSans-Oblique def 622 | /PaintType 0 def 623 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 624 | /FontBBox [-2080 -717 3398 2187] def 625 | /FontType 3 def 626 | /Encoding [/c /d /C /g /H /i /n /r /R /t /u /Y] def 627 | /CharStrings 13 dict dup begin 628 | /.notdef 0 def 629 | /c{1126 0 94 -29 1098 1147 sc 630 | 1098 1077 m 631 | 1061 895 l 632 | 1017 927 970 951 920 967 c 633 | 871 983 819 991 766 991 c 634 | 707 991 651 981 598 960 c 635 | 545 939 501 910 465 872 c 636 | 408 814 363 746 332 668 c 637 | 301 590 285 509 285 426 c 638 | 285 325 310 250 360 201 c 639 | 411 152 487 127 590 127 c 640 | 641 127 694 135 751 150 c 641 | 808 165 868 188 930 219 c 642 | 895 37 l 643 | 842 15 787 -1 730 -12 c 644 | 674 -23 616 -29 557 -29 c 645 | 408 -29 294 8 214 82 c 646 | 134 157 94 263 94 401 c 647 | 94 517 115 624 156 721 c 648 | 198 819 260 907 342 985 c 649 | 398 1038 464 1079 539 1106 c 650 | 614 1133 697 1147 786 1147 c 651 | 838 1147 890 1141 941 1129 c 652 | 992 1118 1045 1100 1098 1077 c 653 | 654 | ce} _d 655 | /d{1300 0 94 -29 1309 1556 sc 656 | 856 168 m 657 | 807 103 748 54 681 21 c 658 | 614 -12 539 -29 457 -29 c 659 | 345 -29 256 9 191 85 c 660 | 126 162 94 266 94 399 c 661 | 94 510 114 615 153 715 c 662 | 192 816 249 906 324 985 c 663 | 373 1038 429 1078 491 1105 c 664 | 553 1133 618 1147 686 1147 c 665 | 758 1147 821 1130 876 1095 c 666 | 931 1060 974 1011 1004 946 c 667 | 1124 1556 l 668 | 1309 1556 l 669 | 1006 0 l 670 | 821 0 l 671 | 856 168 l 672 | 673 | 285 432 m 674 | 285 335 307 260 350 206 c 675 | 394 152 455 125 532 125 c 676 | 589 125 642 139 691 166 c 677 | 740 194 784 235 821 289 c 678 | 860 345 891 410 914 483 c 679 | 937 556 948 629 948 700 c 680 | 948 793 926 865 882 917 c 681 | 839 969 779 995 702 995 c 682 | 644 995 590 981 540 954 c 683 | 490 927 447 887 412 836 c 684 | 373 781 342 716 319 643 c 685 | 296 570 285 499 285 432 c 686 | 687 | ce} _d 688 | /C{1430 0 86 -29 1423 1520 sc 689 | 1423 1378 m 690 | 1382 1165 l 691 | 1318 1230 1250 1278 1178 1309 c 692 | 1107 1340 1029 1356 946 1356 c 693 | 832 1356 732 1329 645 1274 c 694 | 559 1219 485 1136 422 1024 c 695 | 382 952 351 876 330 795 c 696 | 309 715 299 634 299 553 c 697 | 299 417 334 313 404 242 c 698 | 475 171 577 135 711 135 c 699 | 804 135 893 150 978 179 c 700 | 1063 209 1146 254 1227 313 c 701 | 1180 74 l 702 | 1101 40 1020 14 939 -3 c 703 | 858 -20 777 -29 696 -29 c 704 | 505 -29 355 23 247 127 c 705 | 140 231 86 376 86 561 c 706 | 86 680 106 796 147 911 c 707 | 188 1026 247 1130 324 1225 c 708 | 405 1326 498 1400 602 1448 c 709 | 707 1496 828 1520 967 1520 c 710 | 1052 1520 1133 1508 1209 1484 c 711 | 1286 1461 1357 1425 1423 1378 c 712 | 713 | ce} _d 714 | /g{1300 0 66 -426 1221 1147 sc 715 | 1221 1120 m 716 | 1030 139 l 717 | 993 -51 923 -193 819 -286 c 718 | 716 -379 576 -426 401 -426 c 719 | 336 -426 276 -421 221 -411 c 720 | 166 -402 114 -387 66 -367 c 721 | 100 -188 l 722 | 145 -217 193 -239 244 -253 c 723 | 295 -267 349 -274 406 -274 c 724 | 523 -274 618 -242 693 -178 c 725 | 768 -115 818 -23 842 96 c 726 | 858 180 l 727 | 807 121 747 77 679 46 c 728 | 611 15 538 0 459 0 c 729 | 346 0 256 37 191 112 c 730 | 126 187 94 291 94 422 c 731 | 94 525 114 626 153 725 c 732 | 192 824 248 912 319 989 c 733 | 366 1040 421 1079 484 1106 c 734 | 547 1133 613 1147 682 1147 c 735 | 757 1147 823 1129 879 1094 c 736 | 935 1059 977 1010 1004 946 c 737 | 1036 1120 l 738 | 1221 1120 l 739 | 740 | 944 709 m 741 | 944 800 923 870 880 919 c 742 | 837 968 777 993 698 993 c 743 | 649 993 603 983 559 964 c 744 | 515 945 477 918 446 883 c 745 | 395 826 356 758 327 680 c 746 | 299 603 285 523 285 440 c 747 | 285 348 306 277 349 228 c 748 | 392 179 454 154 535 154 c 749 | 652 154 749 207 827 312 c 750 | 905 418 944 550 944 709 c 751 | 752 | ce} _d 753 | /H{1540 0 55 0 1485 1493 sc 754 | 346 1493 m 755 | 549 1493 l 756 | 430 881 l 757 | 1163 881 l 758 | 1282 1493 l 759 | 1485 1493 l 760 | 1194 0 l 761 | 991 0 l 762 | 1130 711 l 763 | 397 711 l 764 | 258 0 l 765 | 55 0 l 766 | 346 1493 l 767 | 768 | ce} _d 769 | /i{569 0 72 0 559 1556 sc 770 | 375 1556 m 771 | 559 1556 l 772 | 514 1323 l 773 | 330 1323 l 774 | 375 1556 l 775 | 776 | 291 1120 m 777 | 475 1120 l 778 | 256 0 l 779 | 72 0 l 780 | 291 1120 l 781 | 782 | ce} _d 783 | /n{1298 0 72 0 1159 1147 sc 784 | 1141 676 m 785 | 1010 0 l 786 | 825 0 l 787 | 956 669 l 788 | 962 700 967 728 970 752 c 789 | 973 776 975 795 975 809 c 790 | 975 865 957 909 922 940 c 791 | 887 971 837 987 774 987 c 792 | 675 987 590 954 519 888 c 793 | 448 823 401 734 379 621 c 794 | 256 0 l 795 | 72 0 l 796 | 289 1120 l 797 | 473 1120 l 798 | 436 944 l 799 | 487 1009 549 1059 621 1094 c 800 | 693 1129 769 1147 848 1147 c 801 | 947 1147 1023 1120 1077 1067 c 802 | 1132 1014 1159 939 1159 842 c 803 | 1159 818 1157 792 1154 765 c 804 | 1151 738 1147 708 1141 676 c 805 | 806 | ce} _d 807 | /r{842 0 72 0 948 1147 sc 808 | 913 950 m 809 | 894 960 873 968 849 973 c 810 | 825 978 799 981 772 981 c 811 | 674 981 588 944 515 869 c 812 | 442 795 393 696 369 571 c 813 | 256 0 l 814 | 72 0 l 815 | 291 1120 l 816 | 475 1120 l 817 | 440 946 l 818 | 489 1011 547 1060 614 1095 c 819 | 682 1130 754 1147 831 1147 c 820 | 851 1147 871 1146 890 1143 c 821 | 909 1141 929 1137 948 1132 c 822 | 913 950 l 823 | 824 | ce} _d 825 | /R{1423 0 55 0 1229 1493 sc 826 | 516 1327 m 827 | 414 797 l 828 | 674 797 l 829 | 776 797 858 825 921 881 c 830 | 984 938 1016 1011 1016 1102 c 831 | 1016 1175 995 1230 952 1269 c 832 | 910 1308 849 1327 770 1327 c 833 | 516 1327 l 834 | 835 | 887 717 m 836 | 930 707 965 682 993 643 c 837 | 1022 604 1055 525 1092 408 c 838 | 1219 0 l 839 | 1006 0 l 840 | 889 383 l 841 | 859 482 824 548 785 581 c 842 | 746 614 685 631 604 631 c 843 | 381 631 l 844 | 258 0 l 845 | 55 0 l 846 | 346 1493 l 847 | 801 1493 l 848 | 939 1493 1045 1462 1118 1399 c 849 | 1192 1337 1229 1247 1229 1130 c 850 | 1229 1026 1198 936 1135 860 c 851 | 1072 784 990 736 887 717 c 852 | 853 | ce} _d 854 | /t{803 0 131 0 866 1438 sc 855 | 866 1120 m 856 | 838 977 l 857 | 471 977 l 858 | 352 369 l 859 | 348 346 345 327 343 312 c 860 | 341 297 340 285 340 276 c 861 | 340 233 353 202 378 183 c 862 | 404 164 445 154 502 154 c 863 | 688 154 l 864 | 657 0 l 865 | 481 0 l 866 | 372 0 290 21 236 64 c 867 | 183 107 156 171 156 258 c 868 | 156 273 157 290 159 308 c 869 | 161 327 164 347 168 369 c 870 | 287 977 l 871 | 131 977 l 872 | 160 1120 l 873 | 313 1120 l 874 | 375 1438 l 875 | 559 1438 l 876 | 498 1120 l 877 | 866 1120 l 878 | 879 | ce} _d 880 | /u{1298 0 117 -29 1206 1120 sc 881 | 137 444 m 882 | 268 1120 l 883 | 453 1120 l 884 | 322 451 l 885 | 315 418 310 390 307 367 c 886 | 304 344 303 324 303 309 c 887 | 303 252 320 208 355 177 c 888 | 390 146 439 131 502 131 c 889 | 601 131 686 164 758 231 c 890 | 830 298 877 387 899 500 c 891 | 1022 1120 l 892 | 1206 1120 l 893 | 989 0 l 894 | 805 0 l 895 | 842 176 l 896 | 790 111 728 60 656 24 c 897 | 585 -11 509 -29 428 -29 c 898 | 330 -29 254 -2 199 51 c 899 | 144 105 117 180 117 276 c 900 | 117 296 119 321 122 351 c 901 | 125 381 130 412 137 444 c 902 | 903 | ce} _d 904 | /Y{1251 0 129 0 1384 1493 sc 905 | 129 1493 m 906 | 346 1493 l 907 | 625 879 l 908 | 1157 1493 l 909 | 1384 1493 l 910 | 707 711 l 911 | 569 0 l 912 | 367 0 l 913 | 504 711 l 914 | 129 1493 l 915 | 916 | ce} _d 917 | end readonly def 918 | 919 | /BuildGlyph { 920 | exch begin 921 | CharStrings exch 922 | 2 copy known not {pop /.notdef} if 923 | true 3 1 roll get exec 924 | end 925 | } _d 926 | 927 | /BuildChar { 928 | 1 index /Encoding get exch get 929 | 1 index /BuildGlyph get exec 930 | } _d 931 | 932 | FontName currentdict end definefont pop 933 | %!PS-Adobe-3.0 Resource-Font 934 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 935 | 10 dict begin 936 | /FontName /DejaVuSansDisplay def 937 | /PaintType 0 def 938 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 939 | /FontBBox [-93 -948 3673 2524] def 940 | /FontType 3 def 941 | /Encoding [/integral] def 942 | /CharStrings 2 dict dup begin 943 | /.notdef 0 def 944 | /integral{1508 0 165 -615 1344 2192 sc 945 | 683 1768 m 946 | 691 1925 733 2035 809 2098 c 947 | 885 2161 959 2192 1030 2192 c 948 | 1101 2192 1167 2163 1226 2104 c 949 | 1286 2045 1325 1950 1344 1817 c 950 | 1134 1796 l 951 | 1118 1919 1083 1980 1030 1980 c 952 | 963 1980 926 1897 918 1732 c 953 | 826 -191 l 954 | 819 -348 777 -458 700 -521 c 955 | 623 -584 550 -615 479 -615 c 956 | 408 -615 342 -586 282 -527 c 957 | 223 -468 184 -373 165 -240 c 958 | 375 -219 l 959 | 391 -342 426 -403 479 -403 c 960 | 546 -403 583 -321 591 -156 c 961 | 683 1768 l 962 | 963 | ce} _d 964 | end readonly def 965 | 966 | /BuildGlyph { 967 | exch begin 968 | CharStrings exch 969 | 2 copy known not {pop /.notdef} if 970 | true 3 1 roll get exec 971 | end 972 | } _d 973 | 974 | /BuildChar { 975 | 1 index /Encoding get exch get 976 | 1 index /BuildGlyph get exec 977 | } _d 978 | 979 | FontName currentdict end definefont pop 980 | %!PS-Adobe-3.0 Resource-Font 981 | %%Creator: Converted from TrueType to Type 3 by Matplotlib. 982 | 10 dict begin 983 | /FontName /DejaVuSans-Bold def 984 | /PaintType 0 def 985 | /FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def 986 | /FontBBox [-2190 -850 4045 2405] def 987 | /FontType 3 def 988 | /Encoding [/r] def 989 | /CharStrings 2 dict dup begin 990 | /.notdef 0 def 991 | /r{1010 0 172 0 1004 1147 sc 992 | 1004 815 m 993 | 973 830 941 840 910 847 c 994 | 879 854 848 858 817 858 c 995 | 725 858 654 828 604 769 c 996 | 555 710 530 626 530 516 c 997 | 530 0 l 998 | 172 0 l 999 | 172 1120 l 1000 | 530 1120 l 1001 | 530 936 l 1002 | 576 1009 629 1063 688 1096 c 1003 | 748 1130 820 1147 903 1147 c 1004 | 915 1147 928 1146 942 1145 c 1005 | 956 1144 976 1142 1003 1139 c 1006 | 1004 815 l 1007 | 1008 | ce} _d 1009 | end readonly def 1010 | 1011 | /BuildGlyph { 1012 | exch begin 1013 | CharStrings exch 1014 | 2 copy known not {pop /.notdef} if 1015 | true 3 1 roll get exec 1016 | end 1017 | } _d 1018 | 1019 | /BuildChar { 1020 | 1 index /Encoding get exch get 1021 | 1 index /BuildGlyph get exec 1022 | } _d 1023 | 1024 | FontName currentdict end definefont pop 1025 | end 1026 | %%EndProlog 1027 | mpldict begin 1028 | 18 288 translate 1029 | 576 216 0 0 clipbox 1030 | gsave 1031 | 0 0 m 1032 | 576 0 l 1033 | 576 216 l 1034 | 0 216 l 1035 | cl 1036 | grestore 1037 | gsave 1038 | 20.78 56.28 m 1039 | 558.72 56.28 l 1040 | 558.72 158.26375 l 1041 | 20.78 158.26375 l 1042 | cl 1043 | 1.000 setgray 1044 | fill 1045 | grestore 1046 | 0.800 setlinewidth 1047 | 1 setlinejoin 1048 | 0 setlinecap 1049 | [] 0 setdash 1050 | 0.000 setgray 1051 | gsave 1052 | /o { 1053 | gsave 1054 | newpath 1055 | translate 1056 | 0.8 setlinewidth 1057 | 1 setlinejoin 1058 | 1059 | 0 setlinecap 1060 | 1061 | 0 0 m 1062 | 0 -3.5 l 1063 | 1064 | gsave 1065 | 0.000 setgray 1066 | fill 1067 | grestore 1068 | stroke 1069 | grestore 1070 | } bind def 1071 | 45.2318 56.28 o 1072 | grestore 1073 | /DejaVuSans 12.000 selectfont 1074 | gsave 1075 | 1076 | 41.411506 40.155000 translate 1077 | 0.000000 rotate 1078 | 0.000000 0 m /zero glyphshow 1079 | grestore 1080 | gsave 1081 | /o { 1082 | gsave 1083 | newpath 1084 | translate 1085 | 0.8 setlinewidth 1086 | 1 setlinejoin 1087 | 1088 | 0 setlinecap 1089 | 1090 | 0 0 m 1091 | 0 -3.5 l 1092 | 1093 | gsave 1094 | 0.000 setgray 1095 | fill 1096 | grestore 1097 | stroke 1098 | grestore 1099 | } bind def 1100 | 144.027 56.28 o 1101 | grestore 1102 | gsave 1103 | 1104 | 136.386418 40.155000 translate 1105 | 0.000000 rotate 1106 | 0.000000 0 m /two glyphshow 1107 | 7.634766 0 m /zero glyphshow 1108 | grestore 1109 | gsave 1110 | /o { 1111 | gsave 1112 | newpath 1113 | translate 1114 | 0.8 setlinewidth 1115 | 1 setlinejoin 1116 | 1117 | 0 setlinecap 1118 | 1119 | 0 0 m 1120 | 0 -3.5 l 1121 | 1122 | gsave 1123 | 0.000 setgray 1124 | fill 1125 | grestore 1126 | stroke 1127 | grestore 1128 | } bind def 1129 | 242.822 56.28 o 1130 | grestore 1131 | gsave 1132 | 1133 | 235.181643 40.155000 translate 1134 | 0.000000 rotate 1135 | 0.000000 0 m /four glyphshow 1136 | 7.634766 0 m /zero glyphshow 1137 | grestore 1138 | gsave 1139 | /o { 1140 | gsave 1141 | newpath 1142 | translate 1143 | 0.8 setlinewidth 1144 | 1 setlinejoin 1145 | 1146 | 0 setlinecap 1147 | 1148 | 0 0 m 1149 | 0 -3.5 l 1150 | 1151 | gsave 1152 | 0.000 setgray 1153 | fill 1154 | grestore 1155 | stroke 1156 | grestore 1157 | } bind def 1158 | 341.617 56.28 o 1159 | grestore 1160 | gsave 1161 | 1162 | 333.976868 40.155000 translate 1163 | 0.000000 rotate 1164 | 0.000000 0 m /six glyphshow 1165 | 7.634766 0 m /zero glyphshow 1166 | grestore 1167 | gsave 1168 | /o { 1169 | gsave 1170 | newpath 1171 | translate 1172 | 0.8 setlinewidth 1173 | 1 setlinejoin 1174 | 1175 | 0 setlinecap 1176 | 1177 | 0 0 m 1178 | 0 -3.5 l 1179 | 1180 | gsave 1181 | 0.000 setgray 1182 | fill 1183 | grestore 1184 | stroke 1185 | grestore 1186 | } bind def 1187 | 440.413 56.28 o 1188 | grestore 1189 | gsave 1190 | 1191 | 432.772093 40.155000 translate 1192 | 0.000000 rotate 1193 | 0.000000 0 m /eight glyphshow 1194 | 7.634766 0 m /zero glyphshow 1195 | grestore 1196 | gsave 1197 | /o { 1198 | gsave 1199 | newpath 1200 | translate 1201 | 0.8 setlinewidth 1202 | 1 setlinejoin 1203 | 1204 | 0 setlinecap 1205 | 1206 | 0 0 m 1207 | 0 -3.5 l 1208 | 1209 | gsave 1210 | 0.000 setgray 1211 | fill 1212 | grestore 1213 | stroke 1214 | grestore 1215 | } bind def 1216 | 539.208 56.28 o 1217 | grestore 1218 | gsave 1219 | 1220 | 527.747006 40.155000 translate 1221 | 0.000000 rotate 1222 | 0.000000 0 m /one glyphshow 1223 | 7.634766 0 m /zero glyphshow 1224 | 15.269531 0 m /zero glyphshow 1225 | grestore 1226 | gsave 1227 | 284.250000 21.498750 translate 1228 | 0.000000 rotate 1229 | /DejaVuSans-Oblique 16.0 selectfont 1230 | 0.000000 0.031250 moveto 1231 | /n glyphshow 1232 | grestore 1233 | 2.000 setlinewidth 1234 | 2 setlinecap 1235 | 0.200 setgray 1236 | gsave 1237 | 537.94 101.984 20.78 56.28 clipbox 1238 | 45.231818 60.915716 m 1239 | 50.171579 60.916495 l 1240 | 55.111341 60.918345 l 1241 | 60.051102 60.921548 l 1242 | 64.990863 60.926358 l 1243 | 69.930624 60.933035 l 1244 | 74.870386 60.941899 l 1245 | 79.810147 60.953372 l 1246 | 84.749908 60.968052 l 1247 | 89.689669 60.986794 l 1248 | 94.629431 61.010818 l 1249 | 99.569192 61.041846 l 1250 | 104.508953 61.082287 l 1251 | 109.448714 61.135466 l 1252 | 114.388476 61.205934 l 1253 | 119.328237 61.299856 l 1254 | 124.267998 61.425507 l 1255 | 129.207759 61.593877 l 1256 | 134.147521 61.819393 l 1257 | 139.087282 62.12072 l 1258 | 144.027043 62.521602 l 1259 | 148.966804 63.051609 l 1260 | 153.906566 63.746626 l 1261 | 158.846327 64.648815 l 1262 | 163.786088 65.805701 l 1263 | 168.725849 67.267984 l 1264 | 173.665611 69.085647 l 1265 | 178.605372 71.302063 l 1266 | 183.545133 73.946015 l 1267 | 188.484894 77.021976 l 1268 | 193.424656 80.499596 l 1269 | 198.364417 84.303991 l 1270 | 203.304178 88.309078 l 1271 | 208.243939 92.336498 l 1272 | 213.183701 96.16246 l 1273 | 218.123462 99.533912 l 1274 | 223.063223 102.193761 l 1275 | 228.002984 103.91273 l 1276 | 232.942746 104.5233 l 1277 | 237.882507 103.949765 l 1278 | 242.822268 102.228264 l 1279 | 247.762029 99.512144 l 1280 | 252.701791 96.060738 l 1281 | 257.641552 92.2131 l 1282 | 262.581313 88.351219 l 1283 | 267.521074 84.858884 l 1284 | 272.460836 82.082329 l 1285 | 277.400597 80.297186 l 1286 | 282.340358 79.684053 l 1287 | 287.280119 80.313108 l 1288 | 292.219881 82.137383 l 1289 | 297.159642 84.994592 l 1290 | 302.099403 88.618226 l 1291 | 307.039164 92.659026 l 1292 | 311.978926 96.717164 l 1293 | 316.918687 100.383388 l 1294 | 321.858448 103.284657 l 1295 | 326.798209 105.127404 l 1296 | 331.737971 105.730862 l 1297 | 336.677732 105.044162 l 1298 | 341.617493 103.14418 l 1299 | 346.557254 100.215248 l 1300 | 351.497016 96.515586 l 1301 | 356.436777 92.337655 l 1302 | 361.376538 87.969943 l 1303 | 366.316299 83.66621 l 1304 | 371.256061 79.625671 l 1305 | 376.195822 75.984773 l 1306 | 381.135583 72.818951 l 1307 | 386.075344 70.151403 l 1308 | 391.015106 67.965578 l 1309 | 395.954867 66.218455 l 1310 | 400.894628 64.852527 l 1311 | 405.834389 63.805345 l 1312 | 410.774151 63.016253 l 1313 | 415.713912 62.430502 l 1314 | 420.653673 62.001263 l 1315 | 425.593434 61.690111 l 1316 | 430.533196 61.466559 l 1317 | 435.472957 61.307067 l 1318 | 440.412718 61.193872 l 1319 | 445.352479 61.113813 l 1320 | 450.292241 61.057296 l 1321 | 455.232002 61.017408 l 1322 | 460.171763 60.989224 l 1323 | 465.111524 60.969258 l 1324 | 470.051286 60.955059 l 1325 | 474.991047 60.944911 l 1326 | 479.930808 60.937612 l 1327 | 484.870569 60.932325 l 1328 | 489.810331 60.928463 l 1329 | 494.750092 60.925615 l 1330 | 499.689853 60.923492 l 1331 | 504.629614 60.921888 l 1332 | 509.569376 60.920656 l 1333 | 514.509137 60.919689 l 1334 | 519.448898 60.918903 l 1335 | 524.388659 60.918229 l 1336 | 529.328421 60.917594 l 1337 | 534.268182 60.916873 l 1338 | stroke 1339 | grestore 1340 | 0 setlinecap 1341 | [7.4 3.2] 0 setdash 1342 | gsave 1343 | 537.94 101.984 20.78 56.28 clipbox 1344 | 45.231818 60.956275 m 1345 | 50.171579 61.242398 l 1346 | 55.111341 61.921408 l 1347 | 60.051102 63.092807 l 1348 | 64.990863 64.834314 l 1349 | 69.930624 67.206528 l 1350 | 74.870386 70.252586 l 1351 | 79.810147 73.995309 l 1352 | 84.749908 78.432742 l 1353 | 89.689669 83.532745 l 1354 | 94.629431 89.227304 l 1355 | 99.569192 95.407406 l 1356 | 104.508953 101.91949 l 1357 | 109.448714 108.564642 l 1358 | 114.388476 115.101689 l 1359 | 119.328237 121.255221 l 1360 | 124.267998 126.729156 l 1361 | 129.207759 131.225796 l 1362 | 134.147521 134.469418 l 1363 | 139.087282 136.232423 l 1364 | 144.027043 136.361067 l 1365 | 148.966804 134.797134 l 1366 | 153.906566 131.591776 l 1367 | 158.846327 126.908349 l 1368 | 163.786088 121.012491 l 1369 | 168.725849 114.249704 l 1370 | 173.665611 107.012998 l 1371 | 178.605372 99.705169 l 1372 | 183.545133 92.701509 l 1373 | 188.484894 86.318745 l 1374 | 193.424656 80.794764 l 1375 | 198.364417 76.281339 l 1376 | 203.304178 72.849335 l 1377 | 208.243939 70.503305 l 1378 | 213.183701 69.200712 l 1379 | 218.123462 68.870524 l 1380 | 223.063223 69.426792 l 1381 | 228.002984 70.774573 l 1382 | 232.942746 72.807966 l 1383 | 237.882507 75.402334 l 1384 | 242.822268 78.4046 l 1385 | 247.762029 81.626389 l 1386 | 252.701791 84.844431 l 1387 | 257.641552 87.811048 l 1388 | 262.581313 90.274963 l 1389 | 267.521074 92.009641 l 1390 | 272.460836 92.843742 l 1391 | 277.400597 92.686899 l 1392 | 282.340358 91.544502 l 1393 | 287.280119 89.51745 l 1394 | 292.219881 86.786454 l 1395 | 297.159642 83.584152 l 1396 | 302.099403 80.161129 l 1397 | 307.039164 76.752849 l 1398 | 311.978926 73.553613 l 1399 | 316.918687 70.701205 l 1400 | 321.858448 68.273003 l 1401 | 326.798209 66.291716 l 1402 | 331.737971 64.737392 l 1403 | 336.677732 63.561945 l 1404 | 341.617493 62.703046 l 1405 | 346.557254 62.095334 l 1406 | 351.497016 61.678099 l 1407 | 356.436777 61.399547 l 1408 | 361.376538 61.218311 l 1409 | 366.316299 61.103101 l 1410 | 371.256061 61.031335 l 1411 | 376.195822 60.987363 l 1412 | 381.135583 60.96073 l 1413 | 386.075344 60.944676 l 1414 | 391.015106 60.934961 l 1415 | 395.954867 60.928991 l 1416 | 400.894628 60.925221 l 1417 | 405.834389 60.922747 l 1418 | 410.774151 60.921048 l 1419 | 415.713912 60.919829 l 1420 | 420.653673 60.91892 l 1421 | 425.593434 60.918223 l 1422 | 430.533196 60.917678 l 1423 | 435.472957 60.917249 l 1424 | 440.412718 60.916909 l 1425 | 445.352479 60.91664 l 1426 | 450.292241 60.916426 l 1427 | 455.232002 60.916258 l 1428 | 460.171763 60.916125 l 1429 | 465.111524 60.91602 l 1430 | 470.051286 60.915938 l 1431 | 474.991047 60.915873 l 1432 | 479.930808 60.915822 l 1433 | 484.870569 60.915782 l 1434 | 489.810331 60.91575 l 1435 | 494.750092 60.915725 l 1436 | 499.689853 60.915705 l 1437 | 504.629614 60.915688 l 1438 | 509.569376 60.915675 l 1439 | 514.509137 60.915663 l 1440 | 519.448898 60.915654 l 1441 | 524.388659 60.915645 l 1442 | 529.328421 60.915636 l 1443 | 534.268182 60.915625 l 1444 | stroke 1445 | grestore 1446 | 2 setlinecap 1447 | [] 0 setdash 1448 | 0.600 setgray 1449 | gsave 1450 | 537.94 101.984 20.78 56.28 clipbox 1451 | 45.231818 60.965589 m 1452 | 50.171579 61.317242 l 1453 | 55.111341 62.151764 l 1454 | 60.051102 63.591445 l 1455 | 64.990863 65.731805 l 1456 | 69.930624 68.64732 l 1457 | 74.870386 72.391007 l 1458 | 79.810147 76.99091 l 1459 | 84.749908 82.444626 l 1460 | 89.689669 88.712649 l 1461 | 94.629431 95.711381 l 1462 | 99.569192 103.306831 l 1463 | 104.508953 111.310253 l 1464 | 109.448714 119.477152 l 1465 | 114.388476 127.511079 l 1466 | 119.328237 135.073486 l 1467 | 124.267998 141.800386 l 1468 | 129.207759 147.325749 l 1469 | 134.147521 151.310467 l 1470 | 139.087282 153.474441 l 1471 | 144.027043 153.628125 l 1472 | 148.966804 151.699048 l 1473 | 153.906566 147.748635 l 1474 | 158.846327 141.975428 l 1475 | 163.786088 134.702497 l 1476 | 168.725849 126.349341 l 1477 | 173.665611 117.391363 l 1478 | 178.605372 108.312541 l 1479 | 183.545133 99.558395 l 1480 | 188.484894 91.49647 l 1481 | 193.424656 84.390074 l 1482 | 198.364417 78.388345 l 1483 | 203.304178 73.532466 l 1484 | 208.243939 69.774913 l 1485 | 213.183701 67.006635 l 1486 | 218.123462 65.086438 l 1487 | 223.063223 63.867495 l 1488 | 228.002984 63.217459 l 1489 | 232.942746 63.030466 l 1490 | 237.882507 63.231011 l 1491 | 242.822268 63.770809 l 1492 | 247.762029 64.620425 l 1493 | 252.701791 65.757728 l 1494 | 257.641552 67.155354 l 1495 | 262.581313 68.769396 l 1496 | 267.521074 70.531552 l 1497 | 272.460836 72.346626 l 1498 | 277.400597 74.096611 l 1499 | 282.340358 75.651356 l 1500 | 287.280119 76.884341 l 1501 | 292.219881 77.690611 l 1502 | 297.159642 78.003094 l 1503 | 302.099403 77.80351 l 1504 | 307.039164 77.125256 l 1505 | 311.978926 76.047483 l 1506 | 316.918687 74.681726 l 1507 | 321.858448 73.154132 l 1508 | 326.798209 71.58714 l 1509 | 331.737971 70.084212 l 1510 | 336.677732 68.720047 l 1511 | 341.617493 67.537172 l 1512 | 346.557254 66.548283 l 1513 | 351.497016 65.742628 l 1514 | 356.436777 65.094338 l 1515 | 361.376538 64.570713 l 1516 | 366.316299 64.139034 l 1517 | 371.256061 63.771166 l 1518 | 376.195822 63.445874 l 1519 | 381.135583 63.149199 l 1520 | 386.075344 62.87352 l 1521 | 391.015106 62.61593 l 1522 | 395.954867 62.376463 l 1523 | 400.894628 62.156535 l 1524 | 405.834389 61.957779 l 1525 | 410.774151 61.781328 l 1526 | 415.713912 61.627477 l 1527 | 420.653673 61.495635 l 1528 | 425.593434 61.384458 l 1529 | 430.533196 61.292068 l 1530 | 435.472957 61.216275 l 1531 | 440.412718 61.154795 l 1532 | 445.352479 61.105398 l 1533 | 450.292241 61.06602 l 1534 | 455.232002 61.034826 l 1535 | 460.171763 61.010231 l 1536 | 465.111524 60.990903 l 1537 | 470.051286 60.975742 l 1538 | 474.991047 60.963856 l 1539 | 479.930808 60.954531 l 1540 | 484.870569 60.947199 l 1541 | 489.810331 60.941415 l 1542 | 494.750092 60.936828 l 1543 | 499.689853 60.933165 l 1544 | 504.629614 60.930211 l 1545 | 509.569376 60.927794 l 1546 | 514.509137 60.925773 l 1547 | 519.448898 60.924028 l 1548 | 524.388659 60.922439 l 1549 | 529.328421 60.920856 l 1550 | 534.268182 60.918975 l 1551 | stroke 1552 | grestore 1553 | 0 setlinecap 1554 | [7.4 3.2] 0 setdash 1555 | gsave 1556 | 537.94 101.984 20.78 56.28 clipbox 1557 | 45.231818 60.915674 m 1558 | 50.171579 60.916152 l 1559 | 55.111341 60.91729 l 1560 | 60.051102 60.919259 l 1561 | 64.990863 60.922216 l 1562 | 69.930624 60.926321 l 1563 | 74.870386 60.93177 l 1564 | 79.810147 60.938823 l 1565 | 84.749908 60.947849 l 1566 | 89.689669 60.959371 l 1567 | 94.629431 60.97414 l 1568 | 99.569192 60.993215 l 1569 | 104.508953 61.018076 l 1570 | 109.448714 61.050767 l 1571 | 114.388476 61.094087 l 1572 | 119.328237 61.151824 l 1573 | 124.267998 61.229065 l 1574 | 129.207759 61.332566 l 1575 | 134.147521 61.471193 l 1576 | 139.087282 61.656419 l 1577 | 144.027043 61.902839 l 1578 | 148.966804 62.228627 l 1579 | 153.906566 62.655836 l 1580 | 158.846327 63.210381 l 1581 | 163.786088 63.921467 l 1582 | 168.725849 64.820249 l 1583 | 173.665611 65.937443 l 1584 | 178.605372 67.299696 l 1585 | 183.545133 68.924685 l 1586 | 188.484894 70.815145 l 1587 | 193.424656 72.952407 l 1588 | 198.364417 75.290432 l 1589 | 203.304178 77.751716 l 1590 | 208.243939 80.226631 l 1591 | 213.183701 82.577638 l 1592 | 218.123462 84.649223 l 1593 | 223.063223 86.283402 l 1594 | 228.002984 87.339299 l 1595 | 232.942746 87.714003 l 1596 | 237.882507 87.361029 l 1597 | 242.822268 86.302634 l 1598 | 247.762029 84.633094 l 1599 | 252.701791 82.511811 l 1600 | 257.641552 80.147161 l 1601 | 262.581313 77.773891 l 1602 | 267.521074 75.627836 l 1603 | 272.460836 73.921744 l 1604 | 277.400597 72.824966 l 1605 | 282.340358 72.44845 l 1606 | 287.280119 72.835292 l 1607 | 292.219881 73.956603 l 1608 | 297.159642 75.712631 l 1609 | 302.099403 77.939589 l 1610 | 307.039164 80.422842 l 1611 | 311.978926 82.916684 l 1612 | 316.918687 85.169629 l 1613 | 321.858448 86.952442 l 1614 | 326.798209 88.084736 l 1615 | 331.737971 88.455441 l 1616 | 336.677732 88.033313 l 1617 | 341.617493 86.86561 l 1618 | 346.557254 85.065618 l 1619 | 351.497016 82.792027 l 1620 | 356.436777 80.224562 l 1621 | 361.376538 77.540504 l 1622 | 366.316299 74.895789 l 1623 | 371.256061 72.412833 l 1624 | 376.195822 70.175477 l 1625 | 381.135583 68.230072 l 1626 | 386.075344 66.590869 l 1627 | 391.015106 65.247692 l 1628 | 395.954867 64.1741 l 1629 | 400.894628 63.334754 l 1630 | 405.834389 62.691278 l 1631 | 410.774151 62.206395 l 1632 | 415.713912 61.846464 l 1633 | 420.653673 61.582707 l 1634 | 425.593434 61.391512 l 1635 | 430.533196 61.254146 l 1636 | 435.472957 61.156144 l 1637 | 440.412718 61.086589 l 1638 | 445.352479 61.037396 l 1639 | 450.292241 61.002668 l 1640 | 455.232002 60.978159 l 1641 | 460.171763 60.960841 l 1642 | 465.111524 60.948572 l 1643 | 470.051286 60.939848 l 1644 | 474.991047 60.933612 l 1645 | 479.930808 60.929127 l 1646 | 484.870569 60.925879 l 1647 | 489.810331 60.923506 l 1648 | 494.750092 60.921756 l 1649 | 499.689853 60.920451 l 1650 | 504.629614 60.919466 l 1651 | 509.569376 60.918709 l 1652 | 514.509137 60.918115 l 1653 | 519.448898 60.917632 l 1654 | 524.388659 60.917218 l 1655 | 529.328421 60.916828 l 1656 | 534.268182 60.916384 l 1657 | stroke 1658 | grestore 1659 | 0.800 setlinewidth 1660 | 0 setlinejoin 1661 | 2 setlinecap 1662 | [] 0 setdash 1663 | 0.000 setgray 1664 | gsave 1665 | 20.78 56.28 m 1666 | 20.78 158.26375 l 1667 | stroke 1668 | grestore 1669 | gsave 1670 | 558.72 56.28 m 1671 | 558.72 158.26375 l 1672 | stroke 1673 | grestore 1674 | gsave 1675 | 20.78 56.28 m 1676 | 558.72 56.28 l 1677 | stroke 1678 | grestore 1679 | gsave 1680 | 20.78 158.26375 m 1681 | 558.72 158.26375 l 1682 | stroke 1683 | grestore 1684 | gsave 1685 | 104.250000 169.263750 translate 1686 | 0.000000 rotate 1687 | /DejaVuSans-Oblique 20.0 selectfont 1688 | 0.000000 0.126562 moveto 1689 | /c glyphshow 1690 | /DejaVuSans 20.0 selectfont 1691 | 10.996094 0.126562 moveto 1692 | /parenleft glyphshow 1693 | /DejaVuSans-Oblique 20.0 selectfont 1694 | 18.798828 0.126562 moveto 1695 | /n glyphshow 1696 | /DejaVuSans 20.0 selectfont 1697 | 31.474609 0.126562 moveto 1698 | /comma glyphshow 1699 | 41.728516 0.126562 moveto 1700 | /zero glyphshow 1701 | 54.453125 0.126562 moveto 1702 | /comma glyphshow 1703 | 64.707031 0.126562 moveto 1704 | /zero glyphshow 1705 | 77.431641 0.126562 moveto 1706 | /parenright glyphshow 1707 | 89.130859 0.126562 moveto 1708 | /equal glyphshow 1709 | /DejaVuSansDisplay 20.0 selectfont 1710 | 109.785156 0.126562 moveto 1711 | /integral glyphshow 1712 | /DejaVuSans-Oblique 14.0 selectfont 1713 | 127.133984 17.157812 moveto 1714 | /r glyphshow 1715 | /DejaVuSans-Oblique 9.799999999999999 selectfont 1716 | 132.889844 14.860937 moveto 1717 | /c glyphshow 1718 | 138.277930 14.860937 moveto 1719 | /u glyphshow 1720 | 144.489063 14.860937 moveto 1721 | /t glyphshow 1722 | /DejaVuSans 14.0 selectfont 1723 | 124.137109 -10.248438 moveto 1724 | /zero glyphshow 1725 | /DejaVuSans-Oblique 20.0 selectfont 1726 | 155.208431 0.126562 moveto 1727 | /d glyphshow 1728 | /DejaVuSans-Bold 20.0 selectfont 1729 | 167.903744 0.126562 moveto 1730 | /r glyphshow 1731 | /DejaVuSans-Oblique 20.0 selectfont 1732 | 184.261101 0.126562 moveto 1733 | /Y glyphshow 1734 | /DejaVuSans 14.0 selectfont 1735 | 197.880814 7.782812 moveto 1736 | /zero glyphshow 1737 | 196.477897 -5.342188 moveto 1738 | /zero glyphshow 1739 | /DejaVuSans 20.0 selectfont 1740 | 207.334916 0.126562 moveto 1741 | /parenleft glyphshow 1742 | /DejaVuSans-Bold 20.0 selectfont 1743 | 215.137650 0.126562 moveto 1744 | /r glyphshow 1745 | /DejaVuSans 20.0 selectfont 1746 | 225.000931 0.126562 moveto 1747 | /parenright glyphshow 1748 | /DejaVuSans-Oblique 20.0 selectfont 1749 | 239.297741 0.126562 moveto 1750 | /R glyphshow 1751 | /DejaVuSans-Oblique 14.0 selectfont 1752 | 253.194226 -3.154688 moveto 1753 | /n glyphshow 1754 | /DejaVuSans 20.0 selectfont 1755 | 262.614148 0.126562 moveto 1756 | /parenleft glyphshow 1757 | /DejaVuSans-Oblique 20.0 selectfont 1758 | 270.416882 0.126562 moveto 1759 | /r glyphshow 1760 | /DejaVuSans 20.0 selectfont 1761 | 278.639538 0.126562 moveto 1762 | /parenright glyphshow 1763 | /DejaVuSans-Oblique 20.0 selectfont 1764 | 292.936348 0.126562 moveto 1765 | /g glyphshow 1766 | /DejaVuSans 20.0 selectfont 1767 | 305.631661 0.126562 moveto 1768 | /parenleft glyphshow 1769 | /DejaVuSans-Bold 20.0 selectfont 1770 | 313.434395 0.126562 moveto 1771 | /r glyphshow 1772 | /DejaVuSans 20.0 selectfont 1773 | 327.194161 0.126562 moveto 1774 | /minus glyphshow 1775 | /DejaVuSans-Bold 20.0 selectfont 1776 | 347.848458 0.126562 moveto 1777 | /r glyphshow 1778 | /DejaVuSans-Oblique 14.0 selectfont 1779 | 357.903145 -3.154688 moveto 1780 | /i glyphshow 1781 | /DejaVuSans 20.0 selectfont 1782 | 362.339669 0.126562 moveto 1783 | /parenright glyphshow 1784 | grestore 1785 | 1.000 setlinewidth 1786 | 0 setlinecap 1787 | 0.800 setgray 1788 | gsave 1789 | 389.12 64.28 m 1790 | 547.52 64.28 l 1791 | 549.653333 64.28 550.72 65.346667 550.72 67.48 c 1792 | 550.72 180.8175 l 1793 | 550.72 182.950833 549.653333 184.0175 547.52 184.0175 c 1794 | 389.12 184.0175 l 1795 | 386.986667 184.0175 385.92 182.950833 385.92 180.8175 c 1796 | 385.92 67.48 l 1797 | 385.92 65.346667 386.986667 64.28 389.12 64.28 c 1798 | cl 1799 | gsave 1800 | 1.000 setgray 1801 | fill 1802 | grestore 1803 | stroke 1804 | grestore 1805 | 0.000 setgray 1806 | gsave 1807 | 392.320000 167.617500 translate 1808 | 0.000000 rotate 1809 | /DejaVuSans 12.0 selectfont 1810 | 0.000000 0.875000 moveto 1811 | /C glyphshow 1812 | 8.378906 0.875000 moveto 1813 | /e glyphshow 1814 | 15.761719 0.875000 moveto 1815 | /n glyphshow 1816 | 23.367188 0.875000 moveto 1817 | /t glyphshow 1818 | 28.072266 0.875000 moveto 1819 | /r glyphshow 1820 | 33.005859 0.875000 moveto 1821 | /a glyphshow 1822 | 40.359375 0.875000 moveto 1823 | /l glyphshow 1824 | 43.693359 0.875000 moveto 1825 | /space glyphshow 1826 | 47.507812 0.875000 moveto 1827 | /A glyphshow 1828 | 55.716797 0.875000 moveto 1829 | /t glyphshow 1830 | 60.421875 0.875000 moveto 1831 | /o glyphshow 1832 | 67.763672 0.875000 moveto 1833 | /m glyphshow 1834 | 79.453125 0.875000 moveto 1835 | /space glyphshow 1836 | 83.267578 0.875000 moveto 1837 | /arrowright glyphshow 1838 | 93.322266 0.875000 moveto 1839 | /space glyphshow 1840 | 97.136719 0.875000 moveto 1841 | /N glyphshow 1842 | 106.113281 0.875000 moveto 1843 | /e glyphshow 1844 | 113.496094 0.875000 moveto 1845 | /i glyphshow 1846 | 116.830078 0.875000 moveto 1847 | /g glyphshow 1848 | 124.447266 0.875000 moveto 1849 | /h glyphshow 1850 | 132.052734 0.875000 moveto 1851 | /b glyphshow 1852 | 139.669922 0.875000 moveto 1853 | /o glyphshow 1854 | 147.011719 0.875000 moveto 1855 | /r glyphshow 1856 | grestore 1857 | 2.000 setlinewidth 1858 | 1 setlinejoin 1859 | 2 setlinecap 1860 | 0.200 setgray 1861 | gsave 1862 | 421.92 150.06125 m 1863 | 453.92 150.06125 l 1864 | stroke 1865 | grestore 1866 | 0.000 setgray 1867 | gsave 1868 | 466.720000 144.461250 translate 1869 | 0.000000 rotate 1870 | /DejaVuSans-Oblique 16.0 selectfont 1871 | 0.000000 0.125000 moveto 1872 | /C glyphshow 1873 | /DejaVuSans 16.0 selectfont 1874 | 16.367136 0.125000 moveto 1875 | /arrowright glyphshow 1876 | /DejaVuSans-Oblique 16.0 selectfont 1877 | 34.968646 0.125000 moveto 1878 | /C glyphshow 1879 | grestore 1880 | 0 setlinecap 1881 | [7.4 3.2] 0 setdash 1882 | 0.200 setgray 1883 | gsave 1884 | 421.92 126.576875 m 1885 | 453.92 126.576875 l 1886 | stroke 1887 | grestore 1888 | 0.000 setgray 1889 | gsave 1890 | 466.720000 120.976875 translate 1891 | 0.000000 rotate 1892 | /DejaVuSans-Oblique 16.0 selectfont 1893 | 0.000000 0.125000 moveto 1894 | /C glyphshow 1895 | /DejaVuSans 16.0 selectfont 1896 | 16.367136 0.125000 moveto 1897 | /arrowright glyphshow 1898 | /DejaVuSans-Oblique 16.0 selectfont 1899 | 34.968646 0.125000 moveto 1900 | /H glyphshow 1901 | grestore 1902 | 2 setlinecap 1903 | [] 0 setdash 1904 | 0.600 setgray 1905 | gsave 1906 | 421.92 103.0925 m 1907 | 453.92 103.0925 l 1908 | stroke 1909 | grestore 1910 | 0.000 setgray 1911 | gsave 1912 | 466.720000 97.492500 translate 1913 | 0.000000 rotate 1914 | /DejaVuSans-Oblique 16.0 selectfont 1915 | 0.000000 0.125000 moveto 1916 | /H glyphshow 1917 | /DejaVuSans 16.0 selectfont 1918 | 17.226511 0.125000 moveto 1919 | /arrowright glyphshow 1920 | /DejaVuSans-Oblique 16.0 selectfont 1921 | 35.828021 0.125000 moveto 1922 | /C glyphshow 1923 | grestore 1924 | 0 setlinecap 1925 | [7.4 3.2] 0 setdash 1926 | 0.600 setgray 1927 | gsave 1928 | 421.92 79.608125 m 1929 | 453.92 79.608125 l 1930 | stroke 1931 | grestore 1932 | 0.000 setgray 1933 | gsave 1934 | 466.720000 74.008125 translate 1935 | 0.000000 rotate 1936 | /DejaVuSans-Oblique 16.0 selectfont 1937 | 0.000000 0.328125 moveto 1938 | /H glyphshow 1939 | /DejaVuSans 16.0 selectfont 1940 | 17.226511 0.328125 moveto 1941 | /arrowright glyphshow 1942 | /DejaVuSans-Oblique 16.0 selectfont 1943 | 35.828021 0.328125 moveto 1944 | /H glyphshow 1945 | grestore 1946 | 1947 | end 1948 | showpage 1949 | -------------------------------------------------------------------------------- /figures/Figure1/positions.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure1/positions.pdf -------------------------------------------------------------------------------- /figures/Figure1/positions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure1/positions.png -------------------------------------------------------------------------------- /figures/Figure2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure2.ai -------------------------------------------------------------------------------- /figures/Figure2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "3aafcd06", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from ase.io import read\n", 11 | "from sklearn.decomposition import PCA, KernelPCA\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "from scipy.spatial.transform import Rotation\n", 14 | "import numpy as np\n", 15 | "from ase.visualize.plot import plot_atoms\n", 16 | "from rascal.representations import SphericalInvariants as SOAP\n", 17 | "from skcosmo.preprocessing import StandardFlexibleScaler\n", 18 | "from sklearn.metrics.pairwise import pairwise_kernels\n", 19 | "from functools import partial\n", 20 | "\n", 21 | "import sys\n", 22 | "sys.path.append('../')\n", 23 | "\n", 24 | "from utils import set_mpl_fonts, set_cmap\n", 25 | "\n", 26 | "set_mpl_fonts()\n", 27 | "cmap = set_cmap()" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 2, 33 | "id": "01312732", 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "# read in the frames corresponding to these conformers\n", 38 | "names = ['chair', 'half-chair', 'twist-boat', 'boat', 'planar']\n", 39 | "conf_traj = [read(f'../cyclohexane_data/conformers/{n}.xyz') for n in names]\n", 40 | "\n", 41 | "for frame in conf_traj:\n", 42 | "\n", 43 | " # wrap each frame in its box\n", 44 | " frame.wrap(eps=1E-10)\n", 45 | "\n", 46 | " # mask each frame so that descriptors are only centered on carbon (#6) atoms\n", 47 | " mask = np.zeros(len(frame))\n", 48 | " mask[np.where(frame.numbers == 6)[0]] = 1\n", 49 | " frame.arrays['center_atoms_mask'] = mask\n" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 3, 55 | "id": "7caa4f86", 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "hypers = {\n", 60 | " \"interaction_cutoff\": 4.0,\n", 61 | " \"max_radial\": 6,\n", 62 | " \"max_angular\": 9,\n", 63 | " \"gaussian_sigma_constant\": 0.3,\n", 64 | " \"gaussian_sigma_type\": \"Constant\",\n", 65 | " \"cutoff_smooth_width\": 0.8,\n", 66 | " \"radial_basis\": \"GTO\",\n", 67 | " \"global_species\": [1, 6],\n", 68 | " \"expansion_by_species_method\": \"user defined\",\n", 69 | " \"normalize\": False\n", 70 | "}\n", 71 | "\n", 72 | "soap = SOAP(**hypers)\n", 73 | "normalizer = StandardFlexibleScaler(column_wise=False)\n", 74 | "\n", 75 | "conf_soaps = normalizer.fit_transform(soap.transform(conf_traj).get_features(soap))\n", 76 | "conf_split_soaps = np.split(conf_soaps, len(conf_traj))\n", 77 | "conf_mean_soaps = np.mean(np.split(conf_soaps, len(conf_traj)), axis=1)" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 4, 83 | "id": "f6a41e56", 84 | "metadata": {}, 85 | "outputs": [], 86 | "source": [ 87 | "gamma = 1.0\n", 88 | "k_gamma = partial(pairwise_kernels, metric='rbf', gamma=gamma)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 5, 94 | "id": "f5958c0c", 95 | "metadata": {}, 96 | "outputs": [], 97 | "source": [ 98 | "K_gamma = [[np.mean(np.diag(k_gamma(c1, c2))) for c1 in conf_split_soaps]\n", 99 | " for c2 in conf_split_soaps]" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 6, 105 | "id": "d8e78f84", 106 | "metadata": {}, 107 | "outputs": [ 108 | { 109 | "data": { 110 | "image/png": "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\n", 111 | "text/plain": [ 112 | "
" 113 | ] 114 | }, 115 | "metadata": { 116 | "needs_background": "light" 117 | }, 118 | "output_type": "display_data" 119 | } 120 | ], 121 | "source": [ 122 | "fig, (ax, cax) = plt.subplots(1,\n", 123 | " 2,\n", 124 | " figsize=(10, 9),\n", 125 | " gridspec_kw=dict(width_ratios=(1.0, 0.1)))\n", 126 | "p = ax.imshow(K_gamma, vmin=0.0, vmax=1.0, cmap='bone_r')\n", 127 | "cbar = plt.colorbar(p, cax=cax)\n", 128 | "cbar.set_label('Similarity', rotation=90)\n", 129 | "\n", 130 | "ax.set_xticks(range(5))\n", 131 | "ax.set_yticks(range(5))\n", 132 | "ax.set_xticklabels(names)\n", 133 | "ax.set_yticklabels(names)\n", 134 | "\n", 135 | "ax.set_title(\"Best-Match Kernel of Cyclohexane Conformations\\n\" +\n", 136 | " r\"$k(x_i, x_j) = \\mathrm{{exp}}(-||x_i - x_j||^2)$\".format(gamma))\n", 137 | "\n", 138 | "plt.savefig('Figure4.pdf')" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": null, 144 | "id": "e958474c", 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [] 148 | } 149 | ], 150 | "metadata": { 151 | "kernelspec": { 152 | "display_name": "Python 3 (ipykernel)", 153 | "language": "python", 154 | "name": "python3" 155 | }, 156 | "language_info": { 157 | "codemirror_mode": { 158 | "name": "ipython", 159 | "version": 3 160 | }, 161 | "file_extension": ".py", 162 | "mimetype": "text/x-python", 163 | "name": "python", 164 | "nbconvert_exporter": "python", 165 | "pygments_lexer": "ipython3", 166 | "version": "3.9.5" 167 | }, 168 | "toc": { 169 | "base_numbering": 1, 170 | "nav_menu": {}, 171 | "number_sections": true, 172 | "sideBar": true, 173 | "skip_h1_title": false, 174 | "title_cell": "Table of Contents", 175 | "title_sidebar": "Contents", 176 | "toc_cell": false, 177 | "toc_position": {}, 178 | "toc_section_display": true, 179 | "toc_window_display": false 180 | } 181 | }, 182 | "nbformat": 4, 183 | "nbformat_minor": 5 184 | } 185 | -------------------------------------------------------------------------------- /figures/Figure2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure2.pdf -------------------------------------------------------------------------------- /figures/Figure3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "3aafcd06", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from ase.io import read\n", 11 | "from sklearn.decomposition import PCA, KernelPCA\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "from scipy.spatial.transform import Rotation\n", 14 | "import numpy as np\n", 15 | "from ase.visualize.plot import plot_atoms" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 2, 21 | "id": "01312732", 22 | "metadata": {}, 23 | "outputs": [], 24 | "source": [ 25 | "chair = read('../cyclohexane_data/conformers/chair.xyz')\n", 26 | "chair.cell = None\n", 27 | "chair.positions = chair.positions - np.mean(chair.positions, axis=0)" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 3, 33 | "id": "593ed18f", 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "def plot_mol(positions, ax, vecs=[\"x\", \"y\", \"z\"], fs=14, x=-0.5, y=-0.75):\n", 38 | " atoms = chair.copy()\n", 39 | " atoms.positions = positions\n", 40 | " plot_atoms(atoms, ax=ax)\n", 41 | " ax.arrow(x,\n", 42 | " y,\n", 43 | " 1,\n", 44 | " 0,\n", 45 | " width=0.05,\n", 46 | " clip_on=False,\n", 47 | " color='k',\n", 48 | " head_length=0.3,\n", 49 | " head_width=0.3)\n", 50 | " ax.text(s=vecs[0],\n", 51 | " x=x + 0.25,\n", 52 | " y=y - 0.25,\n", 53 | " fontsize=fs,\n", 54 | " ha='center',\n", 55 | " va='top')\n", 56 | " ax.arrow(x,\n", 57 | " y,\n", 58 | " 0,\n", 59 | " 1,\n", 60 | " width=0.05,\n", 61 | " clip_on=False,\n", 62 | " color='k',\n", 63 | " head_length=0.3,\n", 64 | " head_width=0.3)\n", 65 | " ax.text(s=vecs[1],\n", 66 | " x=x - 0.25,\n", 67 | " y=y + 0.25,\n", 68 | " fontsize=fs,\n", 69 | " ha='right',\n", 70 | " va='center')\n", 71 | " ax.arrow(x,\n", 72 | " y,\n", 73 | " 0.3,\n", 74 | " 0.5,\n", 75 | " width=0.05,\n", 76 | " clip_on=False,\n", 77 | " color='k',\n", 78 | " head_length=0.3,\n", 79 | " head_width=0.3)\n", 80 | " ax.text(s=vecs[2],\n", 81 | " x=x + 0.5,\n", 82 | " y=y + 0.5,\n", 83 | " fontsize=fs,\n", 84 | " ha='left',\n", 85 | " va='bottom')\n", 86 | " ax.set_xticks([])\n", 87 | " ax.set_yticks([])\n", 88 | " ax.spines['top'].set_visible(False)\n", 89 | " ax.spines['right'].set_visible(False)\n", 90 | " ax.spines['bottom'].set_visible(False)\n", 91 | " ax.spines['left'].set_visible(False)" 92 | ] 93 | }, 94 | { 95 | "cell_type": "code", 96 | "execution_count": 4, 97 | "id": "19181457", 98 | "metadata": {}, 99 | "outputs": [], 100 | "source": [ 101 | "def plot_dims(p):\n", 102 | " fig, ax = plt.subplots(1,3,figsize=(10,3))\n", 103 | " ax[0].scatter(p[:, 0], p[:, 1], c=chair.numbers)\n", 104 | " ax[1].scatter(p[:, 0], p[:, 2], c=chair.numbers)\n", 105 | " ax[2].scatter(p[:, 1], p[:, 2], c=chair.numbers)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 45, 111 | "id": "b139df9b", 112 | "metadata": {}, 113 | "outputs": [], 114 | "source": [ 115 | "r = Rotation.random().as_matrix()" 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 46, 121 | "id": "68bedeae", 122 | "metadata": {}, 123 | "outputs": [], 124 | "source": [ 125 | "rot_positions = chair.positions @ r\n", 126 | "\n", 127 | "chair_rot = chair.copy()\n", 128 | "chair_rot.positions = rot_positions" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 47, 134 | "id": "783495ed", 135 | "metadata": {}, 136 | "outputs": [], 137 | "source": [ 138 | "positions_pca = PCA(n_components=3).fit_transform(rot_positions)\n", 139 | "\n", 140 | "chair_pca = chair.copy()\n", 141 | "chair_pca.positions = positions_pca" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 48, 147 | "id": "fb6c00f6", 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "image/png": "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\n", 153 | "text/plain": [ 154 | "
" 155 | ] 156 | }, 157 | "metadata": {}, 158 | "output_type": "display_data" 159 | } 160 | ], 161 | "source": [ 162 | "fig, ax = plt.subplots(1, 2, figsize=(8, 4), sharex=True, sharey=True)\n", 163 | "\n", 164 | "fs = 14\n", 165 | "y = -0.75\n", 166 | "x = -0.5\n", 167 | "\n", 168 | "plot_mol(rot_positions, ax=ax[0])\n", 169 | "plot_mol(positions_pca, ax=ax[1], vecs = [r'$\\mathrm{PC}_1$', r'$\\mathrm{PC}_2$', r'$\\mathrm{PC}_3$'])\n", 170 | "\n", 171 | "ax[1].set_xlim([-1,6])\n", 172 | "ax[1].set_ylim([-1,6])\n", 173 | "\n", 174 | "fig.subplots_adjust(wspace=0)\n", 175 | "plt.savefig(\"Figure3.pdf\")" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": null, 181 | "id": "74a932cc", 182 | "metadata": {}, 183 | "outputs": [], 184 | "source": [ 185 | "from sklearn.manifold import LocallyLinearEmbedding as LLE" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": null, 191 | "id": "16837954", 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "positions_lle = LLE(n_components=3,\n", 196 | " n_neighbors=2).fit_transform(chair.positions)\n", 197 | "positions_lle" 198 | ] 199 | }, 200 | { 201 | "cell_type": "code", 202 | "execution_count": null, 203 | "id": "1cb72b08", 204 | "metadata": {}, 205 | "outputs": [], 206 | "source": [ 207 | "plot_dims(positions_lle)" 208 | ] 209 | }, 210 | { 211 | "cell_type": "code", 212 | "execution_count": null, 213 | "id": "acbb3187", 214 | "metadata": {}, 215 | "outputs": [], 216 | "source": [ 217 | "plot_mol(positions_lle, ax = plt.subplots()[1])" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": null, 223 | "id": "7caa4f86", 224 | "metadata": {}, 225 | "outputs": [], 226 | "source": [] 227 | } 228 | ], 229 | "metadata": { 230 | "kernelspec": { 231 | "display_name": "Python 3 (ipykernel)", 232 | "language": "python", 233 | "name": "python3" 234 | }, 235 | "language_info": { 236 | "codemirror_mode": { 237 | "name": "ipython", 238 | "version": 3 239 | }, 240 | "file_extension": ".py", 241 | "mimetype": "text/x-python", 242 | "name": "python", 243 | "nbconvert_exporter": "python", 244 | "pygments_lexer": "ipython3", 245 | "version": "3.9.5" 246 | }, 247 | "toc": { 248 | "base_numbering": 1, 249 | "nav_menu": {}, 250 | "number_sections": true, 251 | "sideBar": true, 252 | "skip_h1_title": false, 253 | "title_cell": "Table of Contents", 254 | "title_sidebar": "Contents", 255 | "toc_cell": false, 256 | "toc_position": {}, 257 | "toc_section_display": true, 258 | "toc_window_display": false 259 | } 260 | }, 261 | "nbformat": 4, 262 | "nbformat_minor": 5 263 | } 264 | -------------------------------------------------------------------------------- /figures/Figure3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure3.pdf -------------------------------------------------------------------------------- /figures/Figure5.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5.ai -------------------------------------------------------------------------------- /figures/Figure5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5.pdf -------------------------------------------------------------------------------- /figures/Figure5/energy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/energy.png -------------------------------------------------------------------------------- /figures/Figure5/kpca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/kpca.png -------------------------------------------------------------------------------- /figures/Figure5/kpcovr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/kpcovr.png -------------------------------------------------------------------------------- /figures/Figure5/pca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/pca.png -------------------------------------------------------------------------------- /figures/Figure5/pcovr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/pcovr.png -------------------------------------------------------------------------------- /figures/Figure5/tsne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/tsne.png -------------------------------------------------------------------------------- /figures/Figure5/umap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure5/umap.png -------------------------------------------------------------------------------- /figures/Figure6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure6.pdf -------------------------------------------------------------------------------- /figures/Figure7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cersonsky-lab/unsupervised-ml/25df112d951e389e1e210625ad32bb5d05d3d14b/figures/Figure7.png -------------------------------------------------------------------------------- /surface_analysis_data/Mn2In4O8_mp-35162.cif: -------------------------------------------------------------------------------- 1 | # generated using pymatgen 2 | data_MnIn2O4 3 | _symmetry_space_group_name_H-M 'P 1' 4 | _cell_length_a 6.48924799 5 | _cell_length_b 6.48924798 6 | _cell_length_c 6.48924760 7 | _cell_angle_alpha 60.00000475 8 | _cell_angle_beta 60.00000340 9 | _cell_angle_gamma 60.00000530 10 | _symmetry_Int_Tables_number 1 11 | _chemical_formula_structural MnIn2O4 12 | _chemical_formula_sum 'Mn2 In4 O8' 13 | _cell_volume 193.22714354 14 | _cell_formula_units_Z 2 15 | loop_ 16 | _symmetry_equiv_pos_site_id 17 | _symmetry_equiv_pos_as_xyz 18 | 1 'x, y, z' 19 | loop_ 20 | _atom_site_type_symbol 21 | _atom_site_label 22 | _atom_site_symmetry_multiplicity 23 | _atom_site_fract_x 24 | _atom_site_fract_y 25 | _atom_site_fract_z 26 | _atom_site_occupancy 27 | In In0 1 0.125000 0.625000 0.625000 1 28 | In In1 1 0.625000 0.125000 0.625000 1 29 | In In2 1 0.625000 0.625000 0.125000 1 30 | In In3 1 0.625000 0.625000 0.625000 1 31 | Mn Mn4 1 0.000000 0.000000 0.000000 1 32 | Mn Mn5 1 0.250000 0.250000 0.250000 1 33 | O O6 1 0.848712 0.383763 0.383763 1 34 | O O7 1 0.866237 0.866237 0.866237 1 35 | O O8 1 0.383763 0.383763 0.848712 1 36 | O O9 1 0.383763 0.848712 0.383763 1 37 | O O10 1 0.866237 0.401288 0.866237 1 38 | O O11 1 0.866237 0.866237 0.401288 1 39 | O O12 1 0.383763 0.383763 0.383763 1 40 | O O13 1 0.401288 0.866237 0.866237 1 41 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from matplotlib import pyplot as plt 3 | import matplotlib as mpl 4 | 5 | def set_mpl_fonts(): 6 | MEDIUM = 16 7 | SMALL = 12 8 | LARGE = 20 9 | font_params = { 10 | "axes.labelsize": MEDIUM, 11 | "axes.titlesize": LARGE, 12 | "figure.titlesize": LARGE, 13 | "font.size": MEDIUM, 14 | "legend.fontsize": SMALL, 15 | "legend.title_fontsize": SMALL, 16 | "xtick.labelsize": SMALL, 17 | "ytick.labelsize": SMALL, 18 | } 19 | for key, val in font_params.items(): 20 | plt.rcParams[key] = val 21 | 22 | def set_cmap(): 23 | min_val, max_val = 0.1, 0.8 24 | n = 10 25 | orig_cmap = plt.cm.inferno 26 | colors = orig_cmap(np.linspace(min_val, max_val, n)) 27 | cmap = mpl.colors.LinearSegmentedColormap.from_list("mycmap", colors) 28 | return cmap 29 | --------------------------------------------------------------------------------