Extremely Noisy 4-D STEM Strain Mapping Using Cycle Consistent Spatial Transforming Autoencoders (Simulated 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 pickle
import warnings
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
from cmcrameri import cm
# from Auto4DSTEM.src.auto4dstem.nn.Train_Function import TrainClass
# from Auto4DSTEM.src.auto4dstem.Viz.util import mask_class
# from Auto4DSTEM.src.auto4dstem.Viz.viz import set_format_Auto4D, visualize_simulate_result, visual_performance_plot,normalized_strain_matrices
# from m3util.util.IO import download_files_from_txt
from auto4dstem.nn.Train_Function import TrainClass
from auto4dstem.Viz.util import mask_class
from auto4dstem.Viz.viz import set_format_Auto4D, visualize_simulate_result, visual_performance_plot,normalized_strain_matrices
from m3util.util.IO import download_files_from_txt
torch.__version__
'2.2.0+cu121'
Device Setting#
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="6"
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)
warnings.filterwarnings('ignore')
Download Data and Pre-Trained Models#
folder_name = 'Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated'
file_download = "Simulated_4dstem/simulated_label_weights_affine_para"
# check where are you from the root path
download_files_from_txt(file_download,folder_name)
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Cell In[8], line 2
1 # check where are you from the root path
----> 2 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: 'Simulated_4dstem/simulated_label_weights_affine_para'
Build mask for training and generating results#
Build Mask#
# set mask class
set_mask = mask_class()
# generate mask
mask_tensor, mask_list = set_mask.mask_ring(radius_1=50, radius_2 = 85)
Benchmark Simulated 4DSTEM Dataset#
Set BKG level, Load Data and Pre-Trained Weights#
bkg_intensity = 0
bkg_str = format(int(bkg_intensity*100),'02d')
data_path = os.path.abspath(f'{folder_name}/polycrystal_output4D.mat')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Initialize the training class from noise-free simulated dataset#
tc = TrainClass(data_path,
device = device,
transpose = (1,0,3,2),
background_weight=bkg_intensity,
learned_rotation=rotation_path,
adjust_learned_rotation = 0,
num_base=1,
up_size=800,
scale_limit=0.05,
shear_limit=0.1,
rotation_limit=0.1,
trans_limit = 0.15,
adj_mask_para=0,
fixed_mask = mask_list,
check_mask = None,
interpolate = True,
revise_affine = False,
folder_path = folder_name
)
/home/shuyu/4DSTEM/Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated/polycrystal_output4D.mat
add image-rotation pair to whole dataset
100%|█████████████████████████████████████████████████████████████| 65536/65536 [00:00<00:00, 1586844.17it/s]
tc.crop_one_image(clim=[0,4e-5])
/home/shuyu/4DSTEM/Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated/polycrystal_output4D.mat

Figure 1: One random diffration image from 4D-STEM
tc.visual_noise(noise_level = [0,0.25,0.6],file_name='simulated',add_label = True,save_format = 'png')

Figure 2: Diffract image with various Poisson Ditributed Noise intensity. a) Raw data. b) Applied 10% noise intensity. c) 25% noise intensity. d) 45% noise intensity. e) 60% Noise Intensity.
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
Generate and save results#
# # set batch size and load dataset into DataLoader
tc.batch_size = 256
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
100%|██████████████████████████████████████████████████████████████████████| 256/256 [08:02<00:00, 1.88s/it]
Initialize visual result class#
Set hyper parameters of the class#
bkg_intensity = 0
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
rotation_clean = np.load(rotation_path)
scale_shear_clean = np.load(strain_path)
Visualize results in notebook#
img_show = True
if img_show:
%matplotlib inline
else:
plt.ioff()
Create class and visualize rotation result#
visual = visualize_simulate_result(rotation = rotation_clean,
scale_shear = scale_shear_clean,
file_py4DSTEM = file_py4DSTEM,
label_rotation_path = folder_name +'/Label_rotation.npy',
label_xx_path = folder_name +'/Label_strain_xx.npy',
label_yy_path = folder_name +'/Label_strain_yy.npy',
label_xy_path = folder_name +'/Label_shear_xy.npy',
cmap_rotation = cm.vikO,
cmap_strain= cm.vik,
cmap_mae=cm.vik,
noise_intensity = 0,
angle_shift = 25,
strain_diff_range = [-0.03,0.03],
strain_rotation_range = [-40,30],
mae_diff_range = [-0.006,0.006],
mae_rotation_range = [-0.5,0.5],
label_style= 'b'
)
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 47420.25it/s]

Visualize label map#
visual.visual_label_map(cmap_strain = cm.vik,
cmap_rotation = cm.vikO,
label_style='b')

Visualize strain map result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff(label_style='b')

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
05% Noisy 4D STEM#
Load pretraiend weight and rotation path#
bkg_intensity = 0.05
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Update train class parameter for data generating#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = 0
Generate dataset#
tc.reset_dataset()
/home/shuyu/4DSTEM/Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated/polycrystal_output4D.mat
add Poison distributed background noise to whole dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [01:21<00:00, 808.53it/s]
add image-rotation pair to whole dataset
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [00:00<00:00, 225803.94it/s]
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 256/256 [20:21<00:00, 4.77s/it]
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.05
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_5per = np.load(rotation_path)
scale_shear_5per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_5per
visual.scale_shear = scale_shear_5per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-7)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 46478.80it/s]
Visualize strain map result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
10% Noisy 4D STEM#
Load pretraiend weight and rotation path#
bkg_intensity = 0.10
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -25
Generate dataset#
tc.reset_dataset()
/home/shuyu/4DSTEM/Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated/polycrystal_output4D.mat
add Poison distributed background noise to whole dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [01:25<00:00, 769.46it/s]
add image-rotation pair to whole dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [00:00<00:00, 1504243.34it/s]
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 256/256 [20:24<00:00, 4.78s/it]
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.10
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_10per = np.load(rotation_path)
scale_shear_10per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_10per
visual.scale_shear = scale_shear_10per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-5)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 46431.91it/s]
Visualize strain result#
visual.visual_strain()

visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
15% Noisy 4D STEM#
Load pretraiend weight and rotation path#
bkg_intensity = 0.15
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = 0
Generate dataset#
tc.reset_dataset()
/home/shuyu/4DSTEM/Simulated_4dstem/Extremely_Noisy_4DSTEM_Strain_Mapping_Using_CC_ST_AE_Simulated/polycrystal_output4D.mat
add Poison distributed background noise to whole dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [01:27<00:00, 744.99it/s]
add image-rotation pair to whole dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [00:00<00:00, 1547265.51it/s]
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
57%|██████████████████████████████████████████████████████████████████████████████████████████▋ | 145/256 [10:31<08:03, 4.36s/it]
KeyboardInterrupt
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.15
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_15per = np.load(rotation_path)
scale_shear_15per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_15per
visual.scale_shear = scale_shear_15per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-8)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 56071.13it/s]
Visualize strain result#
visual.visual_strain()

visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
20% Noisy 4D STEM#
Load pretraiend weight and rotation path#
bkg_intensity = 0.20
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -20
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.20
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_20per = np.load(rotation_path)
scale_shear_20per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_20per
visual.scale_shear = scale_shear_20per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-7)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 55830.55it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
25% Noisy 4D STEM#
Load pretraiend weight and rotation path#
bkg_intensity = 0.25
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -15
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.25
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_25per = np.load(rotation_path)
scale_shear_25per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_25per
visual.scale_shear = scale_shear_25per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-9)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 46307.74it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 30Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.30
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -30
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.30
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_30per = np.load(rotation_path)
scale_shear_30per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_30per
visual.scale_shear = scale_shear_30per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-9)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 56827.06it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 35Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.35
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -5
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.35
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_35per = np.load(rotation_path)
scale_shear_35per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_35per
visual.scale_shear = scale_shear_35per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-6)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 47082.36it/s]
Visualize strain result#
visual.visual_strain()

visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 40Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.40
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -25
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.40
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_40per = np.load(rotation_path)
scale_shear_40per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_40per
visual.scale_shear = scale_shear_40per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-8)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 49644.70it/s]
Visualize strain result#
visual.visual_strain()

visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 45Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.45
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -40
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.45
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_45per = np.load(rotation_path)
scale_shear_45per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_45per
visual.scale_shear = scale_shear_45per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-7)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 52438.74it/s]
Visualize strain result#
visual.visual_strain()

visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 50Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.50
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = -20
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.50
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_50per = np.load(rotation_path)
scale_shear_50per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_50per
visual.scale_shear = scale_shear_50per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-6)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 56021.23it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 60Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.60
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = 1
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.60
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_60per = np.load(rotation_path)
scale_shear_60per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_60per
visual.scale_shear = scale_shear_60per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-9)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 46945.31it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.mae_diff_range = [-0.01,0.01]
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize 70Percent Background#
Load pretraiend weight and rotation path#
bkg_intensity = 0.70
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Percent_pretrained_rotation.npy'
Add extra rotation accoding to training strategy#
tc.background_weight= bkg_intensity
tc.learned_rotation = rotation_path
# add extra rotation accoding to training strategy
tc.adjust_learned_rotation = 20
Generate dataset#
tc.reset_dataset()
Load pretrained weight to neural network#
weight_path = f"{folder_name}/{bkg_str}percent_noisy_simulated_4dstem_pretrained_weights.pkl"
tc.load_pretrained_weight(weight_path)
tc.predict(train_process='2',
save_strain = True,
save_rotation = True,
file_name=bkg_intensity)
Update visual result class#
Set hyper parameters of the class#
bkg_intensity = 0.70
bkg_str = format(int(bkg_intensity*100),'02d')
rotation_path = f'{folder_name}/{bkg_str}Per_2_train_process_rotation.npy'
strain_path = f'{folder_name}/{bkg_str}Per_2_train_process_scale_shear.npy'
rotation_70per = np.load(rotation_path)
scale_shear_70per = np.load(strain_path)
Load variable into visualization class#
visual.file_py4DSTEM = f'{folder_name}/analysis_bg{bkg_str}per_1e5counts__strain.h5'
visual.rotation = rotation_70per
visual.scale_shear = scale_shear_70per
visual.noise_intensity = bkg_intensity
Reset baseline of py4DSTEM#
visual.reset_baseline()
Shift angle to compare appropriately#
visual.reset_angle(angle_shift=-8)

Update polar decomposition based on new affine matrix#
visual.reset_polar_matrix()
100%|███████████████████████████████████████████████████████████████| 65536/65536 [00:01<00:00, 53125.69it/s]
Visualize strain result#
visual.visual_strain()

Visualize MAE comparison#
visual.mae_diff_range = [-0.015,0.015]
visual.visual_diff()

visual.record_performance(data_index=True,
data_index_path=f'{folder_name}/simulated_4dstem_grain_index.npy',
show_index_map=False,
width=2)
visual.add_data_2_plot()
Visualize performance of both methods#
img_show = True
if img_show:
%matplotlib inline
else:
plt.ioff()
direct_load = True
if direct_load:
with open(f'{folder_name}/MAE_list_simulated_4dstem.pickle', 'rb') as pickle_file:
visual.list_of_dic = pickle.load(pickle_file)
Generate various noise level plots of both methods#
Generate Strain XX results#
# maually_record_fpga_results
# x_add = [0,0.25,0.6]
# fpga_xx = [0.002,0.0017,0.0019]
# fpga_yy = [0.0026,0.0017,0.0022]
# fpga_xy = [0.0015,0.0011,0.0016]
# fpga_rot = [1.63,1.28,1.47]
visual_performance_plot(x_list=visual.extract_ele_from_dic(0)[0],
auto=visual.extract_ele_from_dic(4)[1],
py4d=visual.extract_ele_from_dic(0)[1],
# auto_yerr =visual.extract_ele_from_dic(12)[1],
# py4d_yerr =visual.extract_ele_from_dic(8)[1],
title = 'Strian X',
xlabel = '',
ylabel ='',
# add_x = x_add,
# add_y = fpga_xx,
marker_list = ['o','H','^'],
figsize=(6,5),
ylim = [0,0.005],
fill_between = False,
errorbar= False,
folder_path='save_figures/')

Generate Strain YY results#
visual_performance_plot(x_list=visual.extract_ele_from_dic(0)[0],
auto=visual.extract_ele_from_dic(5)[1],
py4d=visual.extract_ele_from_dic(1)[1],
# auto_yerr =visual.extract_ele_from_dic(13)[1],
# py4d_yerr =visual.extract_ele_from_dic(9)[1],
title = 'Strian Y',
xlabel = '',
ylabel ='',
# add_x = x_add,
# add_y = fpga_yy,
marker_list = ['o','H','^'],
figsize=(6,5),
ylim = [0,0.005],
fill_between = False,
errorbar=False,
folder_path='save_figures/')

Generate Strain XY results#
visual_performance_plot(x_list=visual.extract_ele_from_dic(0)[0],
auto=visual.extract_ele_from_dic(6)[1],
py4d=visual.extract_ele_from_dic(2)[1],
# auto_yerr =visual.extract_ele_from_dic(14)[1],
# py4d_yerr =visual.extract_ele_from_dic(10)[1],
title = 'Shear',
xlabel = '',
ylabel ='',
# add_x = x_add,
# add_y = fpga_xy,
marker_list = ['o','H','^'],
figsize=(6,5),
ylim = [0,0.004],
fill_between = False,
errorbar=False,
folder_path='save_figures/')

Generate Rotation results#
visual_performance_plot(x_list=visual.extract_ele_from_dic(0)[0],
auto=visual.extract_ele_from_dic(7)[1],
py4d=visual.extract_ele_from_dic(3)[1],
# auto_yerr =visual.extract_ele_from_dic(15)[1],
# py4d_yerr =visual.extract_ele_from_dic(11)[1],
title = 'Rotation',
xlabel = '',
ylabel ='',
# add_x = x_add,
# add_y = fpga_rot,
marker_list = ['o','H','^'],
figsize=(6,5),
ylim = [0,1.75],
fill_between = False,
errorbar= False,
folder_path='save_figures/')
