Extremely Noisy 4-D STEM Strain Mapping Using Cycle Consistent Spatial Transforming Autoencoders (Experimental 4dstem)

Contents

Extremely Noisy 4-D STEM Strain Mapping Using Cycle Consistent Spatial Transforming Autoencoders (Experimental 4dstem)#

Package Installation#

import sys
#!{sys.executable} -m pip install -i https://test.pypi.org/simple/ Auto4DSTEM==0.7.1
!{sys.executable} -m pip install -U Auto4DSTEM
Requirement already satisfied: Auto4DSTEM in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (0.2.6)
Requirement already satisfied: importlib-metadata in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (8.5.0)
Requirement already satisfied: M3learning-Util in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (2.0.3)
Requirement already satisfied: cmcrameri==1.8 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (1.8)
Requirement already satisfied: cupy-cuda12x==13.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (13.0.0)
Requirement already satisfied: h5py in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (3.11.0)
Requirement already satisfied: matplotlib==3.6.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (3.6.2)
Requirement already satisfied: numba==0.58.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (0.58.1)
Requirement already satisfied: numpy==1.25.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (1.25.2)
Requirement already satisfied: opencv-python-headless==4.11.0.86 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (4.11.0.86)
Requirement already satisfied: py4DSTEM==0.14.9 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (0.14.9)
Requirement already satisfied: pymatgen==2024.3.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (2024.3.1)
Requirement already satisfied: scikit-image==0.19.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (0.19.3)
Requirement already satisfied: scikit-learn==1.1.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (1.1.3)
Requirement already satisfied: scipy==1.9.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (1.9.3)
Requirement already satisfied: torch==2.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (2.2.0)
Requirement already satisfied: tqdm==4.66.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (4.66.1)
Requirement already satisfied: typing_extensions==4.8.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from Auto4DSTEM) (4.8.0)
Requirement already satisfied: packaging in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from cmcrameri==1.8->Auto4DSTEM) (24.1)
Requirement already satisfied: fastrlock>=0.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from cupy-cuda12x==13.0.0->Auto4DSTEM) (0.8.2)
Requirement already satisfied: contourpy>=1.0.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (1.3.0)
Requirement already satisfied: cycler>=0.10 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (4.53.1)
Requirement already satisfied: kiwisolver>=1.0.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (1.4.7)
Requirement already satisfied: pillow>=6.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (10.4.0)
Requirement already satisfied: pyparsing>=2.2.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (3.1.4)
Requirement already satisfied: python-dateutil>=2.7 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from matplotlib==3.6.2->Auto4DSTEM) (2.9.0.post0)
Requirement already satisfied: llvmlite<0.42,>=0.41.0dev0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from numba==0.58.1->Auto4DSTEM) (0.41.1)
Requirement already satisfied: hdf5plugin>=4.1.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (5.0.0)
Requirement already satisfied: ncempy>=1.8.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (1.11.3)
Requirement already satisfied: scikit-optimize>=0.9.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (0.10.2)
Requirement already satisfied: dill>=0.3.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (0.3.8)
Requirement already satisfied: gdown>=4.7.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (5.2.0)
Requirement already satisfied: dask>=2.3.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (2024.9.0)
Requirement already satisfied: distributed>=2.3.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (2024.9.0)
Requirement already satisfied: emdfile>=0.0.14 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (0.0.15)
Requirement already satisfied: mpire>=2.7.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (2.10.2)
Requirement already satisfied: threadpoolctl>=3.1.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (3.5.0)
Requirement already satisfied: pylops>=2.1.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (2.2.0)
Requirement already satisfied: colorspacious>=1.1.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from py4DSTEM==0.14.9->Auto4DSTEM) (1.1.2)
Requirement already satisfied: monty>=2024.2.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (2024.7.30)
Requirement already satisfied: networkx>=2.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (3.3)
Requirement already satisfied: palettable>=3.1.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (3.3.3)
Requirement already satisfied: pandas in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (2.2.3)
Requirement already satisfied: plotly>=4.5.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (5.24.1)
Requirement already satisfied: pybtex in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (0.24.0)
Requirement already satisfied: requests in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (2.32.3)
Requirement already satisfied: ruamel.yaml>=0.17.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (0.18.6)
Requirement already satisfied: spglib>=2.0.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (2.5.0)
Requirement already satisfied: sympy in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (1.13.3)
Requirement already satisfied: tabulate in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (0.9.0)
Requirement already satisfied: uncertainties>=3.1.4 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (3.2.2)
Requirement already satisfied: joblib in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pymatgen==2024.3.1->Auto4DSTEM) (1.4.2)
Requirement already satisfied: imageio>=2.4.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from scikit-image==0.19.3->Auto4DSTEM) (2.35.1)
Requirement already satisfied: tifffile>=2019.7.26 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from scikit-image==0.19.3->Auto4DSTEM) (2024.8.30)
Requirement already satisfied: PyWavelets>=1.1.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from scikit-image==0.19.3->Auto4DSTEM) (1.7.0)
Requirement already satisfied: filelock in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (3.16.1)
Requirement already satisfied: jinja2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (3.1.4)
Requirement already satisfied: fsspec in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (2024.9.0)
Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.105)
Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.105)
Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.105)
Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (8.9.2.26)
Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.3.1)
Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (11.0.2.54)
Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (10.3.2.106)
Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (11.4.5.107)
Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.0.106)
Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (2.19.3)
Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (12.1.105)
Requirement already satisfied: triton==2.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from torch==2.2.0->Auto4DSTEM) (2.2.0)
Requirement already satisfied: nvidia-nvjitlink-cu12 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch==2.2.0->Auto4DSTEM) (12.6.68)
Requirement already satisfied: zipp>=3.20 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from importlib-metadata->Auto4DSTEM) (3.20.2)
Requirement already satisfied: pygments in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (2.19.1)
Requirement already satisfied: wget in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (3.2)
Requirement already satisfied: opencv-python in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (4.10.0.84)
Requirement already satisfied: seaborn in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (0.13.2)
Requirement already satisfied: globus-cli in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (3.30.1)
Requirement already satisfied: datafed in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (3.0.0)
Requirement already satisfied: tensorflow in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (2.17.1)
Requirement already satisfied: pytest in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from M3learning-Util->Auto4DSTEM) (8.3.3)
Requirement already satisfied: click>=8.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from dask>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (8.1.7)
Requirement already satisfied: cloudpickle>=3.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from dask>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (3.0.0)
Requirement already satisfied: partd>=1.4.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from dask>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (1.4.2)
Requirement already satisfied: pyyaml>=5.3.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from dask>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (6.0.2)
Requirement already satisfied: toolz>=0.10.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from dask>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (0.12.1)
Requirement already satisfied: locket>=1.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (1.0.0)
Requirement already satisfied: msgpack>=1.0.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (1.1.0)
Requirement already satisfied: psutil>=5.8.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (5.9.0)
Requirement already satisfied: sortedcontainers>=2.0.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (2.4.0)
Requirement already satisfied: tblib>=1.6.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (3.0.0)
Requirement already satisfied: tornado>=6.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (6.4.1)
Requirement already satisfied: urllib3>=1.26.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (2.2.3)
Requirement already satisfied: zict>=3.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from distributed>=2.3.0->py4DSTEM==0.14.9->Auto4DSTEM) (3.0.0)
Requirement already satisfied: beautifulsoup4 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from gdown>=4.7.1->py4DSTEM==0.14.9->Auto4DSTEM) (4.12.3)
Requirement already satisfied: MarkupSafe>=2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from jinja2->torch==2.2.0->Auto4DSTEM) (2.1.5)
Requirement already satisfied: tenacity>=6.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from plotly>=4.5.0->pymatgen==2024.3.1->Auto4DSTEM) (9.0.0)
Requirement already satisfied: six>=1.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib==3.6.2->Auto4DSTEM) (1.16.0)
Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from ruamel.yaml>=0.17.0->pymatgen==2024.3.1->Auto4DSTEM) (0.2.8)
Requirement already satisfied: pyaml>=16.9 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from scikit-optimize>=0.9.0->py4DSTEM==0.14.9->Auto4DSTEM) (24.7.0)
Requirement already satisfied: prompt-toolkit>=2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from datafed->M3learning-Util->Auto4DSTEM) (3.0.43)
Requirement already satisfied: protobuf>=4.21.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from datafed->M3learning-Util->Auto4DSTEM) (4.25.5)
Requirement already satisfied: pyzmq>=16 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from datafed->M3learning-Util->Auto4DSTEM) (25.1.2)
Requirement already satisfied: charset-normalizer<4,>=2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from requests->pymatgen==2024.3.1->Auto4DSTEM) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from requests->pymatgen==2024.3.1->Auto4DSTEM) (3.10)
Requirement already satisfied: certifi>=2017.4.17 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from requests->pymatgen==2024.3.1->Auto4DSTEM) (2024.8.30)
Requirement already satisfied: globus-sdk==3.44.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from globus-cli->M3learning-Util->Auto4DSTEM) (3.44.0)
Requirement already satisfied: jmespath==1.0.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from globus-cli->M3learning-Util->Auto4DSTEM) (1.0.1)
Requirement already satisfied: pyjwt<3.0.0,>=2.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pyjwt[crypto]<3.0.0,>=2.0.0->globus-sdk==3.44.0->globus-cli->M3learning-Util->Auto4DSTEM) (2.9.0)
Requirement already satisfied: cryptography!=3.4.0,>=3.3.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from globus-sdk==3.44.0->globus-cli->M3learning-Util->Auto4DSTEM) (43.0.1)
Requirement already satisfied: pytz>=2020.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pandas->pymatgen==2024.3.1->Auto4DSTEM) (2024.2)
Requirement already satisfied: tzdata>=2022.7 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pandas->pymatgen==2024.3.1->Auto4DSTEM) (2024.1)
Requirement already satisfied: latexcodec>=1.0.4 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pybtex->pymatgen==2024.3.1->Auto4DSTEM) (3.0.0)
Requirement already satisfied: iniconfig in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pytest->M3learning-Util->Auto4DSTEM) (2.0.0)
Requirement already satisfied: pluggy<2,>=1.5 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pytest->M3learning-Util->Auto4DSTEM) (1.5.0)
Requirement already satisfied: exceptiongroup>=1.0.0rc8 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pytest->M3learning-Util->Auto4DSTEM) (1.2.0)
Requirement already satisfied: tomli>=1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from pytest->M3learning-Util->Auto4DSTEM) (2.0.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from sympy->pymatgen==2024.3.1->Auto4DSTEM) (1.3.0)
Requirement already satisfied: absl-py>=1.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (2.1.0)
Requirement already satisfied: astunparse>=1.6.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (1.6.3)
Requirement already satisfied: flatbuffers>=24.3.25 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (24.3.25)
Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (0.6.0)
Requirement already satisfied: google-pasta>=0.1.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (0.2.0)
Requirement already satisfied: libclang>=13.0.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (18.1.1)
Requirement already satisfied: ml-dtypes<0.5.0,>=0.3.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (0.4.1)
Requirement already satisfied: opt-einsum>=2.3.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (3.4.0)
Requirement already satisfied: setuptools in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (75.1.0)
Requirement already satisfied: termcolor>=1.1.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (2.5.0)
Requirement already satisfied: wrapt>=1.11.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (1.16.0)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (1.67.1)
Requirement already satisfied: tensorboard<2.18,>=2.17 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (2.17.1)
Requirement already satisfied: keras>=3.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (3.6.0)
Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorflow->M3learning-Util->Auto4DSTEM) (0.37.1)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow->M3learning-Util->Auto4DSTEM) (0.44.0)
Requirement already satisfied: rich in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from keras>=3.2.0->tensorflow->M3learning-Util->Auto4DSTEM) (13.9.4)
Requirement already satisfied: namex in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from keras>=3.2.0->tensorflow->M3learning-Util->Auto4DSTEM) (0.0.8)
Requirement already satisfied: optree in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from keras>=3.2.0->tensorflow->M3learning-Util->Auto4DSTEM) (0.13.0)
Requirement already satisfied: wcwidth in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from prompt-toolkit>=2->datafed->M3learning-Util->Auto4DSTEM) (0.2.5)
Requirement already satisfied: markdown>=2.6.8 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorboard<2.18,>=2.17->tensorflow->M3learning-Util->Auto4DSTEM) (3.7)
Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorboard<2.18,>=2.17->tensorflow->M3learning-Util->Auto4DSTEM) (0.7.2)
Requirement already satisfied: werkzeug>=1.0.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from tensorboard<2.18,>=2.17->tensorflow->M3learning-Util->Auto4DSTEM) (3.1.1)
Requirement already satisfied: soupsieve>1.2 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from beautifulsoup4->gdown>=4.7.1->py4DSTEM==0.14.9->Auto4DSTEM) (2.6)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from requests[socks]->gdown>=4.7.1->py4DSTEM==0.14.9->Auto4DSTEM) (1.7.1)
Requirement already satisfied: cffi>=1.12 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from cryptography!=3.4.0,>=3.3.1->globus-sdk==3.44.0->globus-cli->M3learning-Util->Auto4DSTEM) (1.17.1)
Requirement already satisfied: markdown-it-py>=2.2.0 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from rich->keras>=3.2.0->tensorflow->M3learning-Util->Auto4DSTEM) (3.0.0)
Requirement already satisfied: pycparser in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from cffi>=1.12->cryptography!=3.4.0,>=3.3.1->globus-sdk==3.44.0->globus-cli->M3learning-Util->Auto4DSTEM) (2.22)
Requirement already satisfied: mdurl~=0.1 in /home/shuyu/.conda/envs/HAWQ/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.2.0->tensorflow->M3learning-Util->Auto4DSTEM) (0.1.2)

Package Loading#

%load_ext autoreload
%autoreload 2
import os
import torch
import warnings
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
from cmcrameri import cm
# from Auto4DSTEM.src.auto4dstem.Data.DataProcess import data_translated
# from Auto4DSTEM.src.auto4dstem.nn.Train_Function import TrainClass
# from Auto4DSTEM.src.auto4dstem.Viz.util import mask_class, upsample_mask, center_of_mass,\
#                                 translate_base, select_points, generate_classification
# from Auto4DSTEM.src.auto4dstem.Viz.viz import set_format_Auto4D, visualize_real_4dstem
from auto4dstem.Data.DataProcess import data_translated
from auto4dstem.nn.Train_Function import TrainClass
from auto4dstem.Viz.util import mask_class, upsample_mask, center_of_mass,\
                                translate_base, select_points, generate_classification
from auto4dstem.Viz.viz import set_format_Auto4D, visualize_real_4dstem
from m3util.util.IO import make_folder, download_files_from_txt
torch.__version__
'2.2.0+cu121'
import cv2
cv2.__version__
'4.11.0'

Device Setting#

os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="2"

if torch.cuda.is_available():
    device = torch.device('cuda')
    print("Using GPU")
else:
    device = torch.device('cpu')
    print("Using CPU")
Using GPU

Visualization Format#

set_format = set_format_Auto4D()
pylab.rcParams.update(set_format)
# ignore warning scripts
warnings.filterwarnings('ignore') 

Download Data and Pre-Trained Models#

folder_name = 'Experimental_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Experimental'
file_download =  "Experimental_4dstem/Experimental_label_weights_affine_para"
download_files_from_txt(file_download,folder_name)
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[9], line 1
----> 1 download_files_from_txt(file_download,folder_name)

File ~/.conda/envs/HAWQ/lib/python3.10/site-packages/m3util/util/IO.py:77, in download_files_from_txt(url_file, download_path)
     74 delay = 1
     76 # Open the text file containing URLs
---> 77 with open(url_file, "r") as file:
     78     urls = file.readlines()
     80 # Iterate over each URL

FileNotFoundError: [Errno 2] No such file or directory: 'Experimental_4dstem/Experimental_label_weights_affine_para'

Visualize results in notebook#

img_show = True
if img_show:
    %matplotlib inline
else:
    plt.ioff()

\(WS_2WSe_2\) 4-D STEM#

Build mask for training and generating results#

Build Mask#

# set mask class
set_mask = mask_class(img_size=[120,120])
# generate mask 
mask_tensor, mask_list = set_mask.mask_ring(radius_1=12, radius_2 = 45)

1st Training Process#

Set File Initial, Load Data and Pre-Trained Weights#

data_path = os.path.abspath(f'{folder_name}/data_x256_y256_raw.npy')
file_name = 'WS2WSe2'

Initialize the training class from real dataset#

real_tc = TrainClass(data_path,
                 device = device,
                 crop = ((2,122),(2,122)),
                 transpose= (2,3,0,1),
                 background_intensity =  False,
                 standard_scale = 1.0,
                 en_original_step_size = [120, 120],
                 pool_list =  [4, 3, 2],
                 up_list = [2, 3, 4],
                 num_base = 2,
                 up_size = 480,
                 scale_limit = 0.05,
                 shear_limit = 0.1,
                 rotation_limit = 0.1,
                 crop_radius = 36,
                 fixed_mask = mask_list,
                 interpolate = False,
                 revise_affine = False,
                 folder_path = folder_name
                 )

Load pretrained weight to neural network#

weight_path = f'{folder_name}/{file_name}_1st_training_weights.pkl'
real_tc.load_pretrained_weight(weight_path)

Generate and save results#

# set batch size and load dataset into DataLoader
real_tc.batch_size = 256
real_tc.predict(train_process='1',
               save_rotation = True,
               save_classification = True,
               file_name=file_name)
100%|██████████████████████████████████████████████████████████████████████| 256/256 [01:55<00:00,  2.21it/s]

Initialize visual result class#

Set hyper parameters of the class#

classification_path = f'{folder_name}/{file_name}_1_train_process_classification.npy'
rotation_1st_path = f'{folder_name}/{file_name}_1_train_process_rotation.npy'
classification_1 = np.load(classification_path)

Show 6 examples of training results (Put this process into Package)#

rxs = np.linspace(220,20,5).astype('int')
rys = np.linspace(100,200,5).astype('int')
real_tc.show_pickup_dots(x_axis = rxs,
                         y_axis = rys,
                         )
../_images/8c26681b57653136fdd714fd47a7b14427bbb5b0efbd94c55401bde6d2ea3b87.png

Figure 1: Random select data from real-space.

real_tc.show_transforming_sample(mask = mask_tensor,
                                file_name = file_name,
                                label_style= 'wb'
                                )
../_images/4730b09f660ad82162d82e6d1fb0dfaac03cd1522b6cd2813c69630ce740d381.png

Figure 2: Results of model prediction on selected diffraction images. a) The random input images go to CC-ST-AE. b) Corresponding learned bases generated by the model. c) Affine matrices measured by model applied on the input. d) Inverse of affine matrices applied on learned bases. e) Difference between transformed input and learned bases

2nd Training Process#

Update train class parameter for data generating#

# update number of base and interpolate for 2nd training process
real_tc.learned_rotation = rotation_1st_path
real_tc.adjust_learned_rotation = -10
real_tc.num_base = 1
real_tc.interpolate = True

Generate dataset#

real_tc.reset_dataset()
add image-rotation pair to whole dataset
100%|█████████████████████████████████████████████████████████████| 65536/65536 [00:00<00:00, 1966475.70it/s]

Select diffraction image#

sample_index = np.where(classification_1[:,0]==1)[0]

Load pretrained weight to neural network#

# update weights to reproduce 2nd training results
weight_path = f'{folder_name}/{file_name}_2nd_training_weights.pkl'
real_tc.load_pretrained_weight(weight_path)

Generate and save results#

real_tc.predict(train_process='2',
           save_strain = True,
           save_rotation = True,
           file_name=file_name,
           sample_index = sample_index)
100%|██████████████████████████████████████████████████████████████████████| 123/123 [01:14<00:00,  1.64it/s]

Save trained affine parameter#

Visualize the results and compared with state-of-art#

rotation_2nd_path = f'{folder_name}/{file_name}_2_train_process_rotation.npy'
strain_2nd_path = f'{folder_name}/{file_name}_2_train_process_scale_shear.npy'
rotation_2= np.load(rotation_2nd_path)
scale_shear_2 = np.load(strain_2nd_path)

Visualization for real dataset ( only with real data )#

visual_result = visualize_real_4dstem(rotation = rotation_2,
                                       scale_shear = scale_shear_2,
                                       angle_shift = 6,
                                       shift_ref = 0,
                                       im_size = (256,256),
                                       bkg_position = 1,
                                       classification = classification_1,
                                       title_name = 'WS2WSe2',
                                       cmap_strain='viridis',
                                       cmap_rotation=cm.vikO,
                                       rotation_range = [0.01,60],
                                        )
100%|███████████████████████████████████████████████████████████████| 31351/31351 [00:00<00:00, 59400.54it/s]
100%|███████████████████████████████████████████████████████████████| 31351/31351 [00:00<00:00, 56516.42it/s]
../_images/b267a323a48ff2294d97a0e056dac3cc8d51736d814782fb6cdebdbe7ea2d6b1.png

Figure 3: Rotation map and Histogram measured with Auto4DSTEM. a) Rotation map. b) Histogram.

visual_result.visual_real_strain(label_style= 'wb')
../_images/cdd8ca613b52608e38ba20a6e0969a5aac89e5a2fd821c222ee38f6cb91aaa67.png

Figure 4: Strain maps of \(WS_2WSe_2\) 4D-STEM measured with Auto4DSTEM. a) Strain map and b) histogram in direction \(ε_{xx}\). c) Strain map and d) histogram in direction \(ε_{yy}\). e) Strain map and f) histogram in direction \(ε_{xy}\). g) Strain map and h) histogram in rotation.

visual_result.visual_magnitude_of_strain(strain_range=[-0.025,0.025])
../_images/d81fcab99aacd0c3c0305f0bf54d6755ddae8062a37f942de2a812b116dc5412.png

Figure 5: Strain magitude mesaured with Auto4DSTEM. a) Strain magnitude mapping on \(WS_2WSe_2\) 4D-STEM. b) Corresponding histogram of the strain magnitude.

Visualize for real dataset ( with py4dstem )#

path_py4DSTEM = f'{folder_name}/analysis_exp_2D__strain_ws2wse2.h5'
visual_result.file_py4DSTEM = path_py4DSTEM
visual_result.reset_baseline()
visual_result.reset_angle(angle_shift=42,
                         supplementary_angle= True)
../_images/1818c4e74d50c6dc8373c1d61c499fba812023d1bb8eb80a9a042ee8eefbf3d6.png

Figure 6: Rotation map and Histogram measured with Py4dSETM and Auto4DSTEM. a) Rotation map and c) histogram measured with Py4dSTEM. b) Rotation map and d) histogram measured with Auto4DSTEM.

visual_result.visual_strain(strain_range_xx_cross=[-0.03,0.03],
                            strain_range_yy_cross=[-0.03,0.03],
                            strain_range_xy_cross=[-0.03,0.03])
../_images/a801719ec9ba98f3c10763bf9634c62e6cb55fc920ee7c0b9aff28465ec6edd0.png

Figure 7: Strain maps of \(WS_2WSe_2\) 4D-STEM measured with Py4DSTEM and Auto4DSTEM. a) Strain map and b) histogram in direction \(ε_{xx}\) meansured with Py4DSTEM. e) Strain map and f) histogram in direction \(ε_{yy}\) meansured with Py4DSTEM. i) Strain map and j) histogram in direction \(ε_{xy}\) meansured with Py4DSTEM. m) Strain map and n) histogram in rotation meansured with Py4DSTEM. c) Strain map and d) histogram in direction \(ε_{xx}\) meansured with Auto4DSTEM. g) Strain map and h) histogram in direction \(ε_{yy}\) meansured with Auto4DSTEM. k) Strain map and l) histogram in direction \(ε_{xy}\) meansured with Auto4DSTEM. o) Strain map and p) histogram in rotation meansured with Auto4DSTEM.

visual_result.folder_name
'save_figures'
visual_result.visual_magnitude_of_strain(strain_range = [-0.025,0.025],
                                           ref_range = [-0.025,0.025])
../_images/28070d6e9c3419ae0ccc5827294107c27e02ef33383343004a699a2dcfef0cbe.png

Figure 8: Strain magitude. a) Strain magnitude mapping on 4D-STEM and c) Corresponding histogram measursed with Py4DSTEM. b) Strain magnitude mapping on 4D-STEM and d) Corresponding histogram measursed with Auto4DSTEM.

Rot512 \(WS_2WSe_2\) Experimental 4DSTEM#

1st Training Process ( make beam centered)#

Build mask list for training#

# set mask class
set_mask = mask_class(img_size=[120,120])
# generate mask 
mask_tensor, mask_list = set_mask.mask_single(radius=15)
up_mask_list = upsample_mask(mask_list,120,480)

Set File Initial, Load Data and Pre-Trained Weights#

data_path = os.path.abspath(f'{folder_name}/01_22kx_CL1p5m_50umapt_spot9_rot15_x512_y512.npy')
file_name = 'Rot512'
real_tc = TrainClass(data_path,
                 device = device,
                 crop = ((2,122),(2,122)),
                 transpose= (0,1,2,3),
                 background_intensity = False,
                 boundary_filter = True,
                 en_original_step_size = [120, 120],
                 de_original_step_size = [5, 5],
                 pool_list = [4, 3, 2],
                 up_list = [2, 3, 4],
                 scale = False,
                 shear = False,
                 rotation = False,
                 translation = True,
                 num_base=1,
                 up_size=480,
                 scale_limit = 0.05,
                 shear_limit = 0.1,
                 rotation_limit=0.05,
                 trans_limit = 0.15,
                 crop_radius = 32,
                 fixed_mask = mask_list,
                 interpolate = True,
                 revise_affine = False,
                 folder_path = folder_name
                 )
add sobel filter to whole dataset
100%|██████████████████████████████████████████████████████████████| 262144/262144 [01:22<00:00, 3176.83it/s]

Reproduce translation matrices#

weight_path = f'{folder_name}/{file_name}_1st_training_translation_weights.pkl'
real_tc.load_pretrained_weight(weight_path)

Generate and save results#

# set batch size and load dataset into DataLoader
real_tc.batch_size = 256
real_tc.predict(train_process='1',
               save_translation = True,
               save_base= True,
               file_name=file_name
               )
100%|████████████████████████████████████████████████████████████████████| 1024/1024 [10:09<00:00,  1.68it/s]

Load translation result#

translation_path = f'{folder_name}/{file_name}_1_train_process_translation.npy'
base_path = f'{folder_name}/{file_name}_1_train_process_generated_base.npy'
translation = np.load(translation_path)
test_base = np.load(base_path)

Make generated base at the center#

test_base = torch.tensor(test_base.squeeze())
print(center_of_mass(test_base,up_mask_list[0],0))
(tensor(252.9097), tensor(226.2922))

Adjust x, y coordinates to make beam centered#

adj_x = -0.060434
adj_y = 0.056313
translate_base(adj_x,adj_y,torch.tensor(test_base), up_mask_list[0])
(tensor(240.0001), tensor(240.0001))

Create modified translation parameter#

# create translated matrix
trans_after_adjust = np.copy(translation)
trans_after_adjust[:,0] = trans_after_adjust[:,0]+adj_x
trans_after_adjust[:,1] = trans_after_adjust[:,1]+adj_y

Generate translated dataset#

# if create_dataset is set True, will reproduce the translated 4dstem dataset, takes about 4 hours
create_dataset = False
if create_dataset:
    data_translated(data_path,
                    trans_after_adjust,
                    crop = ((2,122),(2,122)),
                    transpose = (0,1,2,3),
                    save_path = f'{folder_name}/{file_name}')

Reproduce result of translated model#

Set train class for transformed dataset#

data_dir = f'{folder_name}/{file_name}_translated_version.npy'
real_tc.data_dir = data_dir
real_tc.crop = ((0,120),(0,120))
real_tc.transpose = (0,1,2)
real_tc.standard_scale = 1.5
real_tc.up_threshold = 2000
real_tc.rotate_clockwise = False
real_tc.boundary_filter = False
real_tc.scale = True
real_tc.shear = True
real_tc.rotation = True
real_tc.translation = False
real_tc.reset_dataset()

Set mask to separate diffraction images from background noise#

radius_list = [[23,96],[72,109],[108,73],[95,24],[46,11],[11,47]]
mask_tensor, mask_list = set_mask.mask_round(radius=8,center_list=radius_list)

Select diffraction image#

sample_index = select_points(real_tc.data_set,mask_tensor,threshold=478.3,clim=[410,560])
100%|█████████████████████████████████████████████████████████████| 262144/262144 [00:13<00:00, 19242.32it/s]
../_images/4e1dbfcad02f0f423033acb3965310bf8d444925962c448b48af6c052bb6ae3f.png

Figure 9: Signal intensity mapping of Rot512 \(WS_2WSe_2\) Experimental 4DSTEM. a) Intensity mapping on real-space of Rot512 \(WS_2WSe_2\). b) Corresponding histogram of the mapping splitted by red threshold line.

Reproduce strain-mapping results with pretrained weights#

weight_path = f'{folder_name}/{file_name}_1st_training_strain_rotation_weights.pkl'
real_tc.load_pretrained_weight(weight_path)
real_tc.batch_size = 256
real_tc.predict(sample_index = sample_index,
               train_process='1',
               save_rotation = True,
               save_strain = True,
               file_name=file_name,
               )
100%|██████████████████████████████████████████████████████████████████████| 315/315 [03:06<00:00,  1.69it/s]

Generate correct format of classification#

# geneate cluster based on sample index
select_rot = generate_classification(sample_index,
                                    sample_position = 0,
                                    img_size = [512,512],
                                    save_file = True,
                                    file_path = f'{folder_name}/{file_name}')

Visualization for real dataset ( only with real data )#

rotation_2nd = np.load(f'{folder_name}/{file_name}_1_train_process_rotation.npy')
scale_shear_2nd = np.load(f'{folder_name}/{file_name}_1_train_process_scale_shear.npy')
select_rot = np.load(f'{folder_name}/{file_name}_classification.npy')
visual_result = visualize_real_4dstem(rotation = rotation_2nd,
                                           scale_shear = scale_shear_2nd,
                                           angle_shift = 30,
                                           shift_ref = 33,
                                           im_size = (512,512),
                                           bkg_position = 1,
                                           classification = select_rot,
                                           title_name = 'Rot512',
                                           cmap_strain = 'viridis',
                                           cmap_rotation=cm.vikO,
                                           rotation_range = [28.5,30.25],
                                            )
100%|███████████████████████████████████████████████████████████████| 80499/80499 [00:01<00:00, 51208.36it/s]
100%|███████████████████████████████████████████████████████████████| 80499/80499 [00:01<00:00, 55710.91it/s]
../_images/5acf1dd999cf1136f884acb6a5efd8948b32e631848c6cbaa6c9838cc708e238.png

Figure 10: Rotation map and Histogram measured with Auto4DSTEM. a) Rotation map. b) Histogram.

visual_result.visual_real_strain(strain_range_xx_ae=[-0.035,0.02],
                                 strain_range_yy_ae=[-0.035,0.02],
                                 strain_range_xy_ae=[-0.02,0.005],
                                 )
../_images/49a6724871bb62ef7d5b0434e74390eefff7d83efc750fba27b2841864ad55e8.png

Figure 11: Strain maps of 4D-STEM measured with Auto4DSTEM. a) Strain map and b) histogram in direction . c) Strain map and d) histogram in direction . e) Strain map and f) histogram in direction . g) Strain map and h) histogram in rotation.

visual_result.visual_magnitude_of_strain(strain_range = [-0.02,0.035])
../_images/d70adafa5f2828c0338ac4243b09008908ddb1a69d97ab252866e9bd303909aa.png

Figure 12: Strain magitude mesaured with Auto4DSTEM. a) Strain magnitude mapping on 4D-STEM. b) Corresponding histogram of the strain magnitude.

Visualization for result comparison ( with py4DSTEM )#

path_py4DSTEM = f'{folder_name}/analysis_exp_2D_big_triangle__strain.h5'
visual_result.file_py4DSTEM = path_py4DSTEM
visual_result.reset_baseline()
visual_result.reset_angle(angle_shift=30,
                          shift_ref=33,
                          rotation_range=[28.5,30.25],
                          ref_rotation_range=[3,35]
                         )
../_images/79ef5d0338af13fefeae88d395e28faff598c24b69e089f2028715d6313b990a.png

Figure 13: Rotation map and Histogram measured with Py4dSETM and Auto4DSTEM. a) Rotation map and c) histogram measured with Py4dSTEM. b) Rotation map and d) histogram measured with Auto4DSTEM.

visual_result.visual_strain(strain_range_xx_ae=[-0.035,0.02],
                            strain_range_yy_ae=[-0.035,0.02],
                            strain_range_xy_ae=[-0.02,0.005],
                            strain_range_xx_cross=[-0.04,0.06],
                            strain_range_yy_cross=[-0.04,0.06],
                            strain_range_xy_cross=[-0.04,0.04],
                            )
../_images/82df0a22e3db74789e00f51af32f9d4c5165a6de0ded1cb12dab818e7b57e2f3.png

Figure 14: Strain maps of Rot512 \(WS_2WSe_2\) 4D-STEM measured with Py4DSTEM and Auto4DSTEM. a) Strain map and b) histogram in direction \(ε_{xx}\) meansured with Py4DSTEM. e) Strain map and f) histogram in direction \(ε_{yy}\) meansured with Py4DSTEM. i) Strain map and j) histogram in direction \(ε_{xy}\) meansured with Py4DSTEM. m) Strain map and n) histogram in rotation meansured with Py4DSTEM. c) Strain map and d) histogram in direction \(ε_{xx}\) meansured with Auto4DSTEM. g) Strain map and h) histogram in direction \(ε_{yy}\) meansured with Auto4DSTEM. k) Strain map and l) histogram in direction \(ε_{xy}\) meansured with Auto4DSTEM. o) Strain map and p) histogram in rotation meansured with Auto4DSTEM.

visual_result.visual_magnitude_of_strain(strain_range = [-0.02,0.035],
                                           ref_range = [-0.03,0.035])
../_images/da252a5bc89eb4c6befde4fc53da96a42cfb1a60767160b47f0710368e0f3e5a.png

Figure 15: Strain magitude. a) Strain magnitude mapping on 4D-STEM and c) Corresponding histogram measursed with Py4DSTEM. b) Strain magnitude mapping on 4D-STEM and d) Corresponding histogram measursed with Auto4DSTEM.