From ad04ab8e9d8b2318ee4682e2378863b8007116e6 Mon Sep 17 00:00:00 2001 From: rskoupy Date: Fri, 27 Sep 2024 14:41:02 +0200 Subject: [PATCH] version2 --- README.md | 16 +- calibrations.xlsx | Bin 51229 -> 0 bytes fibsem.PNG | Bin 94771 -> 0 bytes logo_psi.png | Bin 17270 -> 0 bytes ptychoScopy.ipynb | 1557 +++++++---------- ptychoscopy/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 178 bytes ptychoscopy/__pycache__/fce.cpython-311.pyc | Bin 0 -> 35241 bytes ptychoscopy/__pycache__/gui.cpython-311.pyc | Bin 0 -> 60318 bytes ptychoscopy/__pycache__/pty.cpython-311.pyc | Bin 0 -> 29354 bytes .../__pycache__/source.cpython-311.pyc | Bin 0 -> 25728 bytes ptychoscopy/calibrations.xlsx | Bin 0 -> 71481 bytes logo4.PNG => ptychoscopy/logo.PNG | Bin ptychoscopy/pty.py | 504 ++++++ sampling criterion.xlsx | Bin 13128 -> 0 bytes scopus.png | Bin 59637 -> 0 bytes sd_0527720.cif | 155 -- 17 files changed, 1108 insertions(+), 1124 deletions(-) delete mode 100644 calibrations.xlsx delete mode 100644 fibsem.PNG delete mode 100644 logo_psi.png create mode 100644 ptychoscopy/__init__.py create mode 100644 ptychoscopy/__pycache__/__init__.cpython-311.pyc create mode 100644 ptychoscopy/__pycache__/fce.cpython-311.pyc create mode 100644 ptychoscopy/__pycache__/gui.cpython-311.pyc create mode 100644 ptychoscopy/__pycache__/pty.cpython-311.pyc create mode 100644 ptychoscopy/__pycache__/source.cpython-311.pyc create mode 100644 ptychoscopy/calibrations.xlsx rename logo4.PNG => ptychoscopy/logo.PNG (100%) create mode 100644 ptychoscopy/pty.py delete mode 100644 sampling criterion.xlsx delete mode 100644 scopus.png delete mode 100644 sd_0527720.cif diff --git a/README.md b/README.md index 72e8cd7..bb0c533 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,14 @@ -# ptychoScopy +------------------------------------------------------------------------------- + ptychoScopy +------------------------------------------------------------------------------- -Jupyter based interactive data acquisition tool designed for appropriate ptychographic experimental setup and data collection. It computes nessesary characteristics which play crutial role in final data reconstruction. You can chose of **Direct methods** (mainly Single Side Band ptychography) or **Iterative reconstruction** which takes probe defocus into account. -With this tool, you can check for probe CTF, scanning step size, probe overlap, detector camera length a proper angular range collection, reconstructed probe size and many more. +Jupyter Notebook/Lab based interactive data acquisition tool designed for appropriate +ptychographic data collection. It consists of SSB (Single Side Band ptychography) +or full-field ITR (iterative reconstruction methods) tabs where method related charts +may be found. With this tool, you can check the probe CTF, scanning step size, probe +overlap, illumination uniformity, detector camera length a proper angular range collection, +reconstructed probe size and many more. For in-detail intructions visit GitLab repository. -More info including step by step instructions can be found in Wiki. +Calibration file can be found in 'ptychoscopy/calibrations.xlsx' + +To start, open the file 'ptychoScopy.ipynb' \ No newline at end of file diff --git a/calibrations.xlsx b/calibrations.xlsx deleted file mode 100644 index 20481c22ccb65d00c1054a2283755017df31ca29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51229 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�x5RGOStAveBW?#S!3&t|F#`w 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�PRa-@F<*0**Y5So}SSbC8Q)qq~Yv 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

@;`ZvkcI^E8-BAHIzoo&8u_HRX5o| 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 Wj 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 BSn~h? diff --git a/logo_psi.png b/logo_psi.png deleted file mode 100644 index c220f08d2b9d1e3c306db9c1e2af296bc1cfda21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17270 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 bB+35=2&X!y8X;-i00000NkvXXu0mjf6v=Ve diff --git a/ptychoScopy.ipynb b/ptychoScopy.ipynb index 1f1e8d0..e8a7a96 100644 --- a/ptychoScopy.ipynb +++ b/ptychoScopy.ipynb @@ -2,1076 +2,703 @@ "cells": [ { "cell_type": "markdown", - "id": "1e474cb7-5fd4-4113-a3fa-ddf5ca152ce5", + "id": "cfe429ad-a3da-4b34-a78d-2828fcfe5f49", "metadata": {}, "source": [ - "# ptychoScopy\n", - "\n", - "Jupyter based interactive data acquisition tool designed for appropriate ptychographic data collection. It computes nessesary characteristics which play crutial role in final data reconstruction. \n", - "You can chose of **Direct methods** (mainly Single Side Band ptychography) or **Iterative reconstruction** which takes probe defocus into account. With this tool, you can check for probe CTF, scanning step size, probe overlap, detector camera length a proper angular range collection, reconstructed probe size and many more.\n", - "\n", - "For more info go to https://gitlab.psi.ch/em-and-diffraction/low-dose-electron-ptychography/ptychoscopy/-/wikis/ptychoScopy\n", - "\n", - "### Controls\n", - "List of controls consists of all parameters needed for proper dataset acquisition design:\n", - "\n", - "| Beam | | Scanning | | Camera length | | Detection | |\n", - "|------ | ------| ------| ------| ------| ------| ------| ------|\n", - "| **Aperture**| probe forming aperture gives probe semi-angle (α) | **Magnification**| controls image field of view | **Nominal CL** | sample to detector distance gives maximal detected angle as well as angular sampling | **Detector** | detector used for data collection | \n", - "| **Energy** | energy of primary electron beam in keV ... gives final pixel size | **Matrix** | gives beam position to position distance + beam defocus = beam overlap | **Use PAAR** | Pumping Aperture Anglar Restriction, build-in aperture may limit maximal scattering angles for shortest camera lengths |**Binning** | reduction in pixel array size usually increas maximum frame rate |\n", - "| **Probe** | probe setting together with chosen probe forming aperture give probe current| | | | | **Dwell time**|single position beam time ... check your detector characteristics |\n", - "| **Defocus** | moves focus out of the sample plane - enlarges beam diameter | | | | | | |\n", - "\n", - "### Start the interactive gui by running the field\n", + "![title](ptychoscopy/logo.png)" + ] + }, + { + "cell_type": "markdown", + "id": "7ad928f6-e3a8-4a1b-a9a2-1d5993374d9a", + "metadata": {}, + "source": [ + " Code @ Radim Skoupý, PSI Villigen 2024" + ] + }, + { + "cell_type": "markdown", + "id": "62ff068b-4918-46fd-8045-7a1f8f8cd851", + "metadata": {}, + "source": [ + "Jupyter Notebook/Lab based interactive data acquisition tool designed for appropriate ptychographic data collection. It consists of **SSB** (Single Side Band ptychography) or **full-field ITR** (iterative reconstruction methods) tabs where method related charts may be found. With this tool, you can check the probe CTF, scanning step size, probe overlap, illumination uniformity, detector camera length a proper angular range collection, reconstructed probe size and many more. For in-detail intructions and up-to-date version visit [GitLab](https://gitlab.psi.ch/em-and-diffraction/low-dose-electron-ptychography/ptychoscopy/-/wikis/ptychoScopy) repository.\n", + " \n", + "#### Start the interactive gui by running the field called RUN ME and then\n", "```python\n", - "display(HBox([controls, VBox([small_controls, gui])]))\n", - "```" + "display(ptychoscopy)\n", + "```\n", + "\n", + "#### Check installed package versions\n", + "```python\n", + "from ptychoscopy import pty\n", + "pty.get_versions() # run before \"display(ptychoscopy)\" field\n", + "```\n", + "\n", + "#### If you use ptychoScopy in your research, we kindly ask that you cite our paper:\n", + "Skoupy R., Mueller E., Pennycook T., Guizar-Sicairos M., Fabbri E., Poghosyan E. ptychoScopy: Users Guide for Optimal Acquisition Design with Electron Ptychography, xxxx, xx, [DOI](https://doi.org)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "9414daad-2958-4c26-8f29-8f6fe92fe992", + "execution_count": 68, + "id": "5c5feaae-861c-4277-9dd5-aee373b3c174", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3910cf673b40428cbbaaa2a78bfa0200", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Button(disabled=True, layout=Layout(grid_area='scanning_set', width='%'), style=ButtonStyle(but…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# # Used packages\n", - "# import sys\n", - "# print (sys.version)\n", - "# import openpyxl\n", - "# print(\"Openpyxl version \", openpyxl.__version__)\n", - "# import numpy as np\n", - "# print(\"Numpy version \", np.__version__)\n", - "# import scipy\n", - "# print(\"Scipy version \", scipy.__version__)\n", - "# import plotly\n", - "# print(\"Plotly version \", plotly.__version__)\n", - "# import pandas\n", - "# print(\"Pandas version \", pandas.__version__)\n", - "# import IPython\n", - "# print(\"IPython version \", IPython.__version__)\n", - "# import ipywidgets\n", - "# print(\"Ipywidgets version \", ipywidgets.__version__)" + "display(ptychoscopy)" + ] + }, + { + "cell_type": "markdown", + "id": "b2865f08-6c85-4ce9-9173-a63e738a1224", + "metadata": {}, + "source": [ + "## RUN ME" ] }, { "cell_type": "code", - "execution_count": null, - "id": "de350192-85ae-4d38-8ed3-14ad43843e01", + "execution_count": 67, + "id": "fecbecdb-0fac-4ac8-a2b3-1ccb3f869a77", "metadata": {}, "outputs": [], "source": [ - "### Initial packages import ###################################################\n", - "import ipywidgets as widgets\n", + "### Initial packages import\n", "import io\n", "import sys\n", "import numpy as np\n", - "from abtem import Probe\n", + "import ipywidgets as widg\n", "import scipy.constants as cons\n", - "from scipy.stats import norm\n", "import plotly.express as px\n", "import plotly.graph_objects as go\n", - "from scipy.interpolate import splrep, BSpline \n", - "from copy import deepcopy\n", - "from pandas import read_excel\n", + "from ptychoscopy import pty\n", "from IPython.display import display\n", "from plotly.subplots import make_subplots\n", - "from ipywidgets import interactive_output, HBox, VBox, Layout, Label, Valid, ToggleButtons, RadioButtons, Dropdown, FloatSlider, Checkbox, Button, ButtonStyle, GridBox,IntSlider,Combobox, ColorPicker" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7937f054-fcd0-4e67-a20f-7696f5903a94", - "metadata": {}, - "outputs": [], - "source": [ "\n", - "display(VBox([top_set, HBox([controls, VBox([small_controls, gui])])]))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41ac78f4-8a75-4258-bfd4-539b28746088", - "metadata": {}, - "outputs": [], - "source": [ - "### CONTROLS ##########################################\n", - "ali = dict(style = {'description_width': '110px','button_width': '55px', 'font_weight': 'bold'}, button_style='', disabled = False)\n", + "try:\n", + " from abtem import Probe\n", + " abtem = True\n", + "except:\n", + " abtem = False\n", + "\n", + "def show_wavelength(caller):\n", + " beam_res.value = f'λ (pm) {str(\"{:.1f}\".format(pty.get_wavelength(caller.new)*1e12))}'\n", + " return beam_res.value\n", + "def show_probe_angle(caller):\n", + " aperture_res.value = f'Semi-angle (mrad) {\"{:.1f}\".format(pty.get_angle(caller.new))}' \n", + " return aperture_res.value\n", + "def show_corrprobe_angle(caller):\n", + " aperture_res2.value = f'corr. {\"{:.2f}\".format(pty.get_angle_corr(caller.new))}'\n", + " return aperture_res2.value\n", + "def show_fov(caller):\n", + " fov_res.value = f'FoV (nm) {\"{:.1f}\".format(pty.get_fov(caller.new))}'\n", + " return fov_res.value\n", + "def show_frame_rate(caller):\n", + " dwell_time_res.value = f'Rate (kHz) {\"{:.1f}\".format(pty.get_aq_frec(caller.new))}' \n", + " return dwell_time_res.value\n", + "def show_cd_det(caller):\n", + " cl_det_res.value = f'Detector CL (cm) {\"{:.1f}\".format(pty.get_cl_detector(caller.new))}' \n", + " return cl_det_res.value\n", + "\n", + "### MICROSCOPE CONTROL PANEL\n", + "image = open(\"ptychoscopy/logo.png\", \"rb\").read()\n", + "logo = widg.Image(value=image, format='png', layout=widg.Layout(grid_area='logo'))\n", + "ali = dict(style = {'description_width': '110px','button_width': '55px', 'font_weight': 'bold'}, button_style='', disabled = False)\n", "ali2 = dict(style = {'description_width': '60px' ,'button_width': '90px', 'font_weight': 'bold'}, button_style='', disabled = False)\n", "ali3 = dict(style = {'description_width': '110px','button_width': '45px', 'font_weight': 'bold'}, button_style='', disabled = False)\n", - "# header = Button(description='Control panel',layout=Layout(width='auto', grid_area='header'), style=ButtonStyle(button_color='navy', font_weight= 'bold',font_size= '20px',font_variant='small-caps',text_color='white'),disabled = False)\n", + "method = widg.ToggleButtons(options=[('SSB ','ssb'),('ITR ','iterative')],description='',icons=['opera','refresh'], tooltips=['Single side band ptychography', 'Iterative reconstruction methods (PIE, ML, DM)'],\n", + " layout=widg.Layout(width='95%', grid_area='methods'), style = {'button_width': '48%','font_weight': 'bold'}, button_style='', disabled = False)\n", + "### Electron beam settings\n", + "beam_set = widg.Button(description='Electron beam settings',layout=widg.Layout(width='95%',grid_area='beam_set'),style=widg.ButtonStyle(button_color='#222261',font_weight='bold',font_size='16px',text_color='white'),disabled=False) \n", + "beam_energy = widg.Dropdown(options=pty.load_energies(), value=200, description='Beam energy (keV)', layout=widg.Layout(width='95%', grid_area='beam_set1'), **ali)\n", + "probe_size = widg.Dropdown(options=pty.load_probes(), value='8C', description='Probe', layout=widg.Layout(width='95%', grid_area='beam_set3'), **ali)\n", + "defocus = widg.FloatSlider(description='Defocus (nm)', value=0, min=0, max=1000, step=5, readout_format='d',continuous_update=False, layout=widg.Layout(width='95%', grid_area='beam_set4'), **ali)\n", + "aperture_name = widg.Label(value = 'Aperture', layout=widg.Layout(width='95%', grid_area='aperture_name'),)\n", + "aperture = widg.ToggleButtons(options=pty.load_apertures(), description='', layout=widg.Layout(width='95%', grid_area='beam_set2'), **ali3)\n", "\n", - "beam_set = Button(description='Electron beam settings',layout=Layout(width='95%', grid_area='beam_set'), style=ButtonStyle(button_color='#222261', font_weight= 'bold',font_size= '16px',text_color='white'),disabled = False) \n", - "beam = Dropdown(options=opt.energies(), value=200,description='Beam energy (keV)', layout=Layout(width='95%', grid_area='beam_set1'), **ali )\n", - "aperture_name = Label(value = 'Aperture',layout=Layout(width='95%', grid_area='aperture_name'),)\n", - "if len(opt.apertures())>5:\n", - " aperture = Dropdown(options=opt.apertures(), description='', layout=Layout(width='95%', grid_area='beam_set2'), **ali)\n", - "else:\n", - " aperture = ToggleButtons(options=opt.apertures(), description='', layout=Layout(width='95%', grid_area='beam_set2'), **ali3)\n", + "### Scanning parameters\n", + "scanning_set = widg.Button(description='Scanning parameters', layout=widg.Layout(width='95%', grid_area='scanning_set'),style=widg.ButtonStyle(button_color='#222261', font_weight= 'bold',font_size= '16px',text_color='white'),disabled = False)\n", + "mag = widg.Dropdown(options=pty.load_magnifications(), value=20, description='Magnification Mx', layout=widg.Layout(width='95%', grid_area='scanning_set1'), **ali)\n", + "matrix = widg.Dropdown(options=pty.load_mappings(), value=256, description='Matrix', layout=widg.Layout(width='95%', grid_area='scanning_set2'), **ali)\n", + "dwell_time = widg.Dropdown(options=pty.load_dwelltimes(), value=10, description='Dwell time (μs)', layout=widg.Layout(width='95%', grid_area='scanning_set3'), **ali)\n", "\n", - "probe = Dropdown(options=opt.probes(), value='8C', description='Probe', layout=Layout(width='95%', grid_area='beam_set3'), **ali)\n", - "defocus = FloatSlider(description='Defocus (nm)', value=0, min=0, max=1000, step=0.5, continuous_update=False, layout=Layout(width='95%', grid_area='beam_set4'), **ali)\n", + "### Detection\n", + "camera_set = widg.Button(description='Detection',layout=widg.Layout(width='95%', grid_area='camera_set'),style=widg.ButtonStyle(button_color='#222261', font_weight= 'bold',font_size= '16px',text_color='white'),disabled = False)\n", + "cl = widg.Dropdown(options=pty.load_cameralengths(aperture, \"nominal\"), value=8, description='Nominal CL (cm)', layout=widg.Layout(width='95%', grid_area='cl_set1'), **ali3)\n", + "camera_name = widg.Label(value = 'Detector',layout=widg.Layout(width='95%', grid_area='camera_name'),)\n", + "camera = widg.ToggleButtons(options=pty.load_detectors(), description='', layout=widg.Layout(width='95%', grid_area='camera_set1'), style = {'description_width': '60px','button_width': str(100/len(pty.load_detectors())-len(pty.load_detectors()))+'%', 'font_weight': 'bold'}, button_style='')\n", + "restr_name = widg.Label(value = 'PAAR',layout=widg.Layout(width='95%', grid_area='restr_name'))\n", + "restr = widg.ToggleButtons(options=[('.',False), ('..',True)], value = False, description='',icons = ['ban','check'], layout=widg.Layout(width='95%', grid_area='camera_set2'),style = {'description_width': '80px','button_width': '48%', 'font_weight': 'bold'}, button_style='')\n", + "binning_name = widg.Label(value = 'Binning',layout=widg.Layout(width='95%', grid_area='binning_name'))\n", + "binning = widg.ToggleButtons(options=[('.',1), ('2',2), ('4',4), ('8',8), ('16',16), ('32',32), ('48',48)], value=1, description='', icons = ['ban','',''], layout=widg.Layout(width='95%', grid_area='camera_set3'), **ali3)\n", + "beam_res = widg.Label(value = f'λ (pm) ' + str(\"{:.1f}\".format(pty.get_wavelength(beam_energy.value)*1e12)),layout=widg.Layout(width='auto', grid_area='sidebar1'))\n", + "aperture_res = widg.Label(value = f'Semi-angle (mrad) '+ str(\"{:.1f}\".format(pty.get_angle(aperture.value))), layout=widg.Layout(width='auto', grid_area='sidebar2'))\n", + "aperture_res2 = widg.Label(value = f'corr. ' + str(\"{:.2f}\".format(pty.get_angle_corr(aperture.value))), layout=widg.Layout(width='auto', grid_area='sidebar5'))\n", + "fov_res = widg.Label(value = f'FoV (nm) ' + str(\"{:.1f}\".format(pty.get_fov(mag.value))), layout=widg.Layout(width='auto', grid_area='sidebar3')) \n", + "dwell_time_res= widg.Label(value = f'Rate (kHz) ' + str(\"{:.1f}\".format(pty.get_aq_frec(dwell_time.value))), layout=widg.Layout(width='auto', grid_area='sidebar4')) \n", + "mag.observe(show_fov, names='value') \n", + "beam_energy.observe(show_wavelength, names='value') \n", + "aperture.observe(show_probe_angle, names='value') \n", + "dwell_time.observe(show_frame_rate, names='value') \n", + "aperture.observe(show_corrprobe_angle, names='value') \n", "\n", - "scanning_set = Button(description='Scanning parameters',layout=Layout(width='95%', grid_area='scanning_set'),style=ButtonStyle(button_color='#222261', font_weight= 'bold',font_size= '16px',text_color='white'),disabled = False)\n", - "mag = Dropdown(options=opt.magnifications(),value=20,description='Magnification Mx', layout=Layout(width='95%', grid_area='scanning_set1'), **ali)\n", - "matrix = Dropdown(options=opt.mappings(), value=256, description='Matrix', layout=Layout(width='95%', grid_area='scanning_set2'), **ali)\n", - "dwell_time = Dropdown(options=opt.dwelltimes(), value=10, description='Dwell time (μs)', layout=Layout(width='95%', grid_area='scanning_set3'), **ali)\n", + "### Visualisation\n", + "visual_set = widg.Button(description='Visualisation',layout=widg.Layout(width='95%', grid_area='visual_set'),style=widg.ButtonStyle(button_color='white', font_weight= 'bold',font_size= '16px',text_color='black'),disabled = False)\n", + "name1 = widg.Button(description='Graphs (%)',layout=widg.Layout(width='95%', grid_area='name1'),style=widg.ButtonStyle(button_color='white', font_weight= 'bold',text_color='black'), disabled = False)\n", + "graph_size = widg.IntSlider(value=100,min=75,max=125,step=5, description='', layout=widg.Layout(width='95%', grid_area='gr_size2'), button_style='primary',disabled=False,)\n", "\n", - "camera_set = Button(description='Detection',layout=Layout(width='95%', grid_area='camera_set'),style=ButtonStyle(button_color='#222261', font_weight= 'bold',font_size= '16px',text_color='white'),disabled = False)\n", - "cl = Dropdown(options=opt.cameralengths(), value=8, description='Nominal CL (cm)', layout=Layout(width='95%', grid_area='cl_set1'), **ali3)\n", - "camera_name = Label(value = 'Detector',layout=Layout(width='95%', grid_area='camera_name'),)\n", - "camera = ToggleButtons(options=opt.detectors(), description='', layout=Layout(width='95%', grid_area='camera_set1'), style = {'description_width': '60px','button_width': str(100/len(opt.detectors())-len(opt.detectors()))+'%', 'font_weight': 'bold'}, button_style='')\n", - "restriction_name = Label(value = 'PAAR',layout=Layout(width='95%', grid_area='restriction_name'),)\n", - "restriction = ToggleButtons(options=[('.',False), ('..',True)], value = False, description='',icons = ['ban','check'], layout=Layout(width='95%', grid_area='camera_set2'),style = {'description_width': '80px','button_width': '48%', 'font_weight': 'bold'}, button_style='')\n", - "binning_name = Label(value = 'Binning',layout=Layout(width='95%', grid_area='binning_name'),)\n", - "binning = ToggleButtons(options=[('.',1), ('2',2), ('4',4), ('8',8), ('16',16), ('24',24), ('32',32), ('48',48)], value=1, description='', icons = ['ban','',''], layout=Layout(width='95%', grid_area='camera_set3'), **ali3)\n", - "\n", - "beam_res = Label(value = f'λ (pm) '+ str(\"{:.1f}\".format(pty.get_wavelength(beam.value)*1e12)),layout=Layout(width='auto', grid_area='sidebar1'),)\n", - "beam.observe(inte.show_wavelength, names='value') \n", - "aperture_res = Label(value = f'Semi-angle (mrad) '+ str(\"{:.1f}\".format(pty.get_angle(aperture.value))), layout=Layout(width='auto', grid_area='sidebar2'),)\n", - "aperture.observe(inte.show_probe_angle, names='value') \n", - "aperture_res2 = Label(value = f'corr. '+ str(\"{:.2f}\".format(pty.get_angle_corr(aperture.value))),layout=Layout(width='auto', grid_area='sidebar5'),)\n", - "aperture.observe(inte.show_corrprobe_angle, names='value') \n", - "fov_res = Label(value = f'FoV (nm) '+ str(\"{:.1f}\".format(pty.get_fov(mag.value))),layout=Layout(width='auto', grid_area='sidebar3'),) \n", - "mag.observe(inte.show_fov, names='value') \n", - "dwell_time_res = Label(value = f'Rate (kHz) '+ str(\"{:.1f}\".format(pty.get_aq_frec(dwell_time.value))),layout=Layout(width='auto', grid_area='sidebar4'),) \n", - "dwell_time.observe(inte.show_frame_rate, names='value') \n", - "\n", - "\n", - "visual_set = Button(description='Visualisation',layout=Layout(width='95%', grid_area='visual_set'),style=ButtonStyle(button_color='white', font_weight= 'bold',font_size= '16px',text_color='black'),disabled = False)\n", - "\n", - "file = open(\"./logo_psi.png\", \"rb\")\n", - "image = file.read()\n", - "logo1 = widgets.Image(value=image, format='png', layout=Layout(grid_area='logo1'))\n", - "\n", - "file = open(\"./logo4.png\", \"rb\")\n", - "image = file.read()\n", - "logo2 = widgets.Image(value=image,format='png', layout=Layout(grid_area='logo2'))\n", - "\n", - "method = ToggleButtons(options=[('SSB ','direct'), ('ITR ','iterative')], description='', icons = ['opera','refresh'], tooltips=['Single side band ptychography', 'Iterative reconstruction methods (PIE, ML, DM)'],\n", - " layout=Layout(width='95%', grid_area='methods2'), style = {'button_width': '48%','font_weight': 'bold'}, button_style='', disabled = False)\n", - "\n", - "name1 = Button(description='Graphs (%)',layout=Layout(width='95%', grid_area='name1'),style=ButtonStyle(button_color='white', font_weight= 'bold',text_color='black'), disabled = False)\n", - "graph_size = IntSlider(value=100,min=75,max=125,step=5, description='', layout=Layout(width='95%', grid_area='gr_size2'), button_style='primary',disabled=False,)\n", - "\n", - "chart = ToggleButtons(options=[('L ','micr'), ('R ','dedic'),('L+R ','both')],value = 'both',icons = ['columns','columns','columns'], description='',\n", - " layout=Layout(width='95%', grid_area='charts'), style = {'button_width': '30%', 'font_weight': 'bold'}, button_style='',disabled=False,)\n", - "\n", - "controls = GridBox(children=[logo2,method, beam_set, beam,aperture_name, aperture, probe, defocus, scanning_set, mag,matrix,dwell_time, cl,camera_set, \n", - " camera,camera_name, restriction_name, restriction, binning_name, binning, beam_res, aperture_res,aperture_res2,fov_res, dwell_time_res, graph_size,name1, chart, visual_set],\n", - " layout=Layout(width='325px', grid_template_rows='90px 40px 35px 35px 35px 35px 35px 30px 30px 35px 35px 35px 35px 35px 35px 35px 80px 10px 75px 10px 35px 35px 35px', grid_template_columns='20% 10% 30% 15% 25%', grid_template_areas='''\n", - " \"logo2 logo2 logo2 logo2 logo2\" \n", - " \"methods2 methods2 methods2 methods2 methods2\"\n", - " \"beam_set beam_set beam_set beam_set beam_set\" \n", - " \"beam_set1 beam_set1 beam_set1 beam_set1 beam_set1\"\n", - " \"beam_set3 beam_set3 beam_set3 beam_set3 beam_set3\"\n", - " \"beam_set4 beam_set4 beam_set4 beam_set4 beam_set4\"\n", - " \"aperture_name beam_set2 beam_set2 beam_set2 beam_set2\"\n", - " \". sidebar2 sidebar2 sidebar2 sidebar5\"\n", - " \"scanning_set scanning_set scanning_set scanning_set scanning_set\" \n", + "### Layout\n", + "controls = widg.GridBox(children=[logo, method, beam_energy, beam_set, aperture_name, aperture, probe_size, defocus, scanning_set, mag, matrix, dwell_time, cl,camera_set, camera, camera_name, restr_name, restr, binning_name,\n", + " binning, beam_res, aperture_res, aperture_res2, fov_res, dwell_time_res, graph_size, name1, visual_set],\n", + " layout=widg.Layout(width='325px', grid_template_rows='90px 40px 35px 35px 35px 35px 35px 30px 30px 35px 35px 35px 35px 35px 35px 35px 80px 95px 35px 35px 35px', grid_template_columns='20% 10% 30% 15% 25%', grid_template_areas='''\n", + " \"logo logo logo logo logo \" \n", + " \"methods methods methods methods methods \"\n", + " \"beam_set beam_set beam_set beam_set beam_set \" \n", + " \"beam_set1 beam_set1 beam_set1 beam_set1 beam_set1 \"\n", + " \"beam_set3 beam_set3 beam_set3 beam_set3 beam_set3 \"\n", + " \"beam_set4 beam_set4 beam_set4 beam_set4 beam_set4 \"\n", + " \"aperture_name beam_set2 beam_set2 beam_set2 beam_set2 \"\n", + " \". sidebar2 sidebar2 sidebar2 sidebar5 \"\n", + " \"scanning_set scanning_set scanning_set scanning_set scanning_set \" \n", " \"scanning_set1 scanning_set1 scanning_set1 scanning_set1 scanning_set1\"\n", " \"scanning_set2 scanning_set2 scanning_set2 scanning_set2 scanning_set2\"\n", " \"scanning_set3 scanning_set3 scanning_set3 scanning_set3 scanning_set3\"\n", - " \"camera_set camera_set camera_set camera_set camera_set\"\n", - " \"cl_set1 cl_set1 cl_set1 cl_set1 cl_set1\"\n", - " \"camera_name camera_set1 camera_set1 camera_set1 camera_set1\"\n", - " \"restriction_name camera_set2 camera_set2 camera_set2 camera_set2\"\n", - " \"binning_name camera_set3 camera_set3 camera_set3 camera_set3\"\n", - " \". . . . .\"\n", - " \". . . . .\"\n", - " \". . . . .\"\n", - " \"visual_set visual_set visual_set visual_set visual_set\"\n", - " \"name1 name1 gr_size2 gr_size2 gr_size2\"\n", - " \"charts charts charts charts charts\"\n", - " '''))\n", + " \"camera_set camera_set camera_set camera_set camera_set \"\n", + " \"cl_set1 cl_set1 cl_set1 cl_set1 cl_set1 \"\n", + " \"camera_name camera_set1 camera_set1 camera_set1 camera_set1 \"\n", + " \"restr_name camera_set2 camera_set2 camera_set2 camera_set2 \"\n", + " \"binning_name camera_set3 camera_set3 camera_set3 camera_set3 \"\n", + " \". . . . . \"\n", + " \"visual_set visual_set visual_set visual_set visual_set \"\n", + " \"name1 name1 gr_size2 gr_size2 gr_size2 \"'''))\n", "\n", + "### GRAPH CONTROL\n", + "style = {'description_width': 'initial'}\n", + "top_set = widg.Button(description='',layout=widg.Layout(width='%', grid_area='scanning_set'), style=widg.ButtonStyle(button_color='white', font_weight= 'bold',font_size= '16px',text_color='#0d48a1'),disabled = True)\n", + "style_graph = widg.ButtonStyle(button_color='#F5F5F5', font_weight= 'bold',font_size= '16px',text_color='black')\n", "\n", + "### PCTF\n", + "ctf_set = widg.Button(description='Phase CTF',layout=widg.Layout(width='100%', grid_area='ctf_set'), style=style_graph,disabled = True)\n", + "ctf_xaxis_name = widg.Label(value = 'x-axis',layout=widg.Layout(width='95%', grid_area='ctf_xaxis_name'),)\n", + "ctf_xaxis = widg.ToggleButtons(options=['α','mrad', 'Å'], layout=widg.Layout(grid_area='ctxaxis'), style = {'button_width': '30%'}, disabled=False)\n", + "element = widg.Dropdown(options=pty.load_elements(), description='Element (ITR)', layout=widg.Layout(width='95%', grid_area='ctf_element'))\n", "\n", + "### Sample\n", + "sample_set = widg.Button(description='Sample',layout=widg.Layout(width='100%', grid_area='sample_set'), style=style_graph, disabled = True)\n", + "overlap_fig = widg.ToggleButtons(options=['Geometrical','Ilumination'], layout=widg.Layout(grid_area='overlap_fig'), style = {'button_width': '45%'}, disabled=False)\n", + "fov_show = widg.FloatSlider(value=0.3, min=0.1, max=10, step=0.1, description='FoV (nm):', disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='.1f', layout=widg.Layout(grid_area='fov_show', width = '100%'))\n", + "beam_pos = widg.IntSlider(value=4, min=4, max=100, step=2, description='Add beams:', disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='d', layout=widg.Layout(grid_area='beam_pos', width = '100%'))\n", + "red_box = widg.Dropdown(options=[('tiny', 0.1), ('small', 0.2), ('middle', 0.3), ('large', 0.4), ('whole', 0.5)], value=0.1, description='Uniformity box', layout=widg.Layout(grid_area='red_box', width = '95%'),style=style)\n", + "box_col = widg.ColorPicker(concise=False, description='', value='cyan', disabled=False, layout=widg.Layout(grid_area='box_col', width = '85%'),)\n", "\n", + "### Camera length based limitations and checks\n", + "cl_set = widg.Button(description='Camera length based limitations and checks', layout=widg.Layout(width='100%', grid_area='cl_set'), style=style_graph, disabled = True)\n", + "check0name = widg.IntRangeSlider(value=[1,6],min=0, max=10,step=1, description='Detector cover (α):', disabled=False, continuous_update=False, orientation='horizontal',readout=True, readout_format='d',layout=widg.Layout(grid_area='check0name', width = '100%'),style=style)\n", + "check1name = widg.IntSlider(value=10,min=0,max=20,step=5,description='Low angle approx. (°):', disabled=False,continuous_update=False,orientation='horizontal',readout=True,readout_format='d',layout=widg.Layout(grid_area='check1name', width = '100%'),style=style)\n", + "check2name = widg.Checkbox(value=False,description='Resolution gain (ITR)',disabled=False, indent=False,layout=widg.Layout(grid_area='check2name'))\n", + "check3name = widg.Checkbox(value=True, description='Recon. box coverage (ITR)',disabled=False, indent=False,layout=widg.Layout(grid_area='check3name'))\n", + "check4name = widg.IntSlider(value=70, min=0 ,max=100, step=5, description='Beam overlap (%):', disabled=False, continuous_update=False, orientation='horizontal', readout=True,readout_format='d', layout=widg.Layout(grid_area='check4name', width = '100%'),style=style)\n", + "check6name = widg.Checkbox(value=False, description='Overall sampling (ITR)', disabled=False, indent=False,layout=widg.Layout(grid_area='check6name'), style=style)\n", "\n", - "### SMALL CONTROLS ##########################################\n", - "style = {'description_width': 'initial'}\n", - "element = Dropdown(options=opt.elements(), description='Element (ITR)', layout=Layout(width='95%', grid_area='ctf_element'))\n", - "ctf_xaxis_name = Label(value = 'x-axis',layout=Layout(width='95%', grid_area='ctf_xaxis_name'),)\n", - "ctf_xaxis = ToggleButtons(options=['α','mrad', 'Å'], layout=Layout(grid_area='ctxaxis'), style = {'button_width': '30%'}, disabled=False)\n", - "overlap_fig = ToggleButtons(options=['Geometrical','Intensity'], layout=Layout(grid_area='overlap_fig'), style = {'button_width': '45%'}, disabled=False)\n", - "beam_pos = IntSlider(value=4, min=4, max=100, step=2, description='Add beams:', disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='d', layout=Layout(grid_area='beam_pos', width = '100%'))\n", - "\n", - "fov_show = FloatSlider(value=0.3, min=0.1, max=10, step=0.1, description='FoV (nm):', disabled=False, continuous_update=False, orientation='horizontal', readout=True, readout_format='.1f', layout=Layout(grid_area='fov_show', width = '100%'))\n", - "top_set = Button(description='',layout=Layout(width='%', grid_area='scanning_set'), style=ButtonStyle(button_color='white', font_weight= 'bold',font_size= '16px',text_color='#0d48a1'),disabled = True)\n", - "red_box = Dropdown(options=[('tiny', 0.1), ('small', 0.2), ('middle', 0.3), ('large', 0.4), ('whole', 0.5)], value=0.1, description='Uniformity box', layout=Layout(grid_area='red_box', width = '95%'),style=style)\n", - "\n", - "\n", - "box_col = ColorPicker(concise=False,description='',value='cyan',disabled=False, layout=Layout(grid_area='box_col', width = '85%'),)\n", - "\n", - "\n", - "\n", - "\n", - "check0name = widgets.IntRangeSlider(value=[1, 6],min=0, max=10,step=1,description='Detector cover (α):',disabled=False,continuous_update=False,orientation='horizontal',readout=True, readout_format='d',layout=Layout(grid_area='check0name', width = '100%'),style=style)\n", - "check1name = widgets.IntSlider(value=10,min=0,max=20,step=5,description='Low angle approx. (°):', disabled=False,continuous_update=False,orientation='horizontal',readout=True,readout_format='d',layout=Layout(grid_area='check1name', width = '100%'),style=style)\n", - "check2name = widgets.Checkbox(value=False,description='Superresolution (ITR)',disabled=False, indent=False,layout=Layout(grid_area='check2name'))\n", - "check3name = widgets.Checkbox(value=True, description='Recon. box coverage (ITR)',disabled=False, indent=False,layout=Layout(grid_area='check3name'))\n", - "check4name = widgets.IntSlider(value=70,min=0,max=100,step=5,description='Beam overlap (%):', disabled=False,continuous_update=False,orientation='horizontal',readout=True,readout_format='d',layout=Layout(grid_area='check4name', width = '100%'),style=style)\n", - "check6name = widgets.Checkbox(value=False,description='Overall sampling (ITR)',disabled=False, indent=False,layout=Layout(grid_area='check6name'),style=style)\n", - "\n", - "sample_set= Button(description='Sample',layout=Layout(width='100%', grid_area='sample_set'), style=ButtonStyle(button_color='#F5F5F5', font_weight= 'bold',font_size= '16px',text_color='black'),disabled = True)\n", - "ctf_set = Button(description='PCTF',layout=Layout(width='100%', grid_area='ctf_set'), style=ButtonStyle(button_color='#F5F5F5', font_weight= 'bold',font_size= '16px',text_color='black'),disabled = True)\n", - "cl_set = Button(description='Camera length based limitations and checks', layout=Layout(width='100%', grid_area='cl_set'), style=ButtonStyle(button_color='#F5F5F5', font_weight= 'bold',font_size= '16px',text_color='black'), disabled = True)\n", - "\n", - "small_controls = GridBox(children=[sample_set, ctf_set, ctf_xaxis, element, beam_pos, fov_show, cl_set, overlap_fig, red_box, box_col, check0name, check1name, check2name, check3name,check4name, check6name, ctf_xaxis_name],\n", - " layout=Layout(width='109%', grid_template_rows='35px 35px 35px 35px 5px', grid_template_columns='4% 3.5% 14% 1.5% 8% 8% 8% 1% 27% 13%', grid_template_areas='''\n", + "### Layout\n", + "graph_controls = widg.GridBox(children=[sample_set, ctf_set, ctf_xaxis, element, beam_pos, fov_show, cl_set, overlap_fig, red_box, box_col, check0name, check1name, check2name, check3name,check4name, check6name, ctf_xaxis_name],\n", + " layout=widg.Layout(width='109%', grid_template_rows='35px 35px 35px 35px 5px', grid_template_columns='4% 3.5% 14% 1.5% 8% 8% 8% 1% 27% 13%', grid_template_areas='''\n", " \". ctf_set ctf_set . sample_set overlap_fig overlap_fig . cl_set cl_set \" \n", " \". ctf_xaxis_name ctxaxis . fov_show fov_show fov_show . check0name check2name \"\n", " \". ctf_element ctf_element . beam_pos beam_pos beam_pos . check4name check6name \"\n", " \". . . . red_box red_box box_col . check1name check3name \"\n", " \". . . . . . . . . . \"'''))\n", "\n", + "def ptycho_interact(beam_energy, aperture, aperture_res, aperture_res2, probe_size, cl, matrix, defocus, mag, camera, binning, dwell_time, restr, method,\n", + " ctf_xaxis, element, graph_size, beam_pos, fov_show, overlap_fig, red_box, box_col, check0name, check1name, check2name, check3name, check4name, check6name):\n", "\n", - "\n", - "def ptycho_interact(beam, aperture, aperture_res, aperture_res2, probe, cl, matrix, defocus, mag, camera, binning, dwell_time, restriction, method, ctf_xaxis, element, graph_size, chart, beam_pos, fov_show, overlap_fig, red_box, box_col, check0name, check1name,\n", - " check2name, check3name, check4name, check6name):\n", - " \n", - " ### SINGLE SETTING PARAMETERS ###\n", - " # beam ... energy in keV\n", + " fov = pty.get_fov(mag) \n", " pctf_itr = pty.get_ctf(element)\n", - " omega_itr = np.array(pty.get_omegas())\n", - " wavelength = pty.get_wavelength(beam)*1e12 # in pm\n", - " fov = pty.get_fov(mag)\n", + " cl_det = pty.get_cl_detector(cl, camera)\n", + " step_size = pty.get_step_size(fov, matrix) # in nm\n", " semi_angle = pty.get_angle(aperture)\n", - " semi_angle_corr = pty.get_angle_corr(aperture) \n", - " current = pty.get_current(probe,aperture) \n", - " pixel_angle = pty.get_pixel_angle(cl, camera, binning)\n", - " cl_det = pty.get_cl_detector(cl)\n", + " omega_itr = np.array(pty.get_omegas())\n", " frame_rate = pty.get_aq_frec(dwell_time)\n", - " step_size = pty.get_step_size(matrix) # in nm\n", - " step_size_corr = np.array(pty.get_step_correction())*pty.get_step_size(matrix) # in nm\n", - " beam_diameter = pty.get_beam_diameter(aperture, defocus)\n", + " current = pty.get_current(probe_size,aperture) \n", + " wavelength = pty.get_wavelength(beam_energy)*1e12 # in pm\n", + " semi_angle_corr = pty.get_angle_corr(aperture) \n", + " pixel_angle = pty.get_pixel_angle(cl, camera, binning)\n", + " beam_diameter = pty.get_beam_diameter(aperture, defocus, semi_angle_corr)\n", " num_pixels, size_pixel = pty.get_detector(camera, binning)\n", + " step_size_corr = np.array(pty.get_step_correction())*pty.get_step_size(fov, matrix) # in nm\n", " beam_diameter_pix = 2*semi_angle_corr/pixel_angle\n", " detector_cover = num_pixels/2*pixel_angle\n", " covered_alfas = detector_cover/semi_angle_corr\n", " overlap = (beam_diameter-step_size_corr)/beam_diameter*100\n", " if overlap < 0:\n", - " overlap = 0\n", - " dose = ((matrix**2)*(dwell_time/1e6)*(current/1e12/cons.e))/((((matrix-1)*step_size_corr)**2)*100)\n", + " overlap = 0 \n", + " e_per_scan = (dwell_time/1e6)*(current/1e12/cons.e)\n", + " dose = ((matrix**2)*e_per_scan)/((((matrix-1)*step_size_corr)**2)*100)\n", " probe_window = (wavelength*cl_det/100)/(size_pixel/1e6)/1000 # now in nm\n", " oversampling = (wavelength/1000)/(2*pixel_angle/1000*step_size_corr)\n", + " max_defocus = (probe_window/4)/np.tan(semi_angle_corr/1000)\n", "\n", - " ### ALL CAMERA LENGTHS PARAMETERS ###\n", + " ### ALL CAMERA LENGTHS PARAMETERS\n", + " cl_all = pty.load_cameralengths(camera, \"nominal\")\n", + " cl_eff_all = pty.load_cameralengths(camera, \"effective\")\n", + " apertures = pty.load_apertures()\n", " pixel_covers = pty.get_pixel_covers(camera, binning) \n", " pump_apertures = pty.get_pumping_apertures()\n", " detector_cover_all = pixel_covers*num_pixels/2\n", - " if restriction == True:\n", - " for x in range(len(detector_cover_all)):\n", + "\n", + " if restr == True:\n", + " for x in range(0,len(detector_cover_all)):\n", " if detector_cover_all[x] > pump_apertures[x]:\n", " detector_cover_all[x] = pump_apertures[x] \n", - " detector_pixels_all = np.round(detector_cover_all/pixel_covers) \n", - " ptycho_pixel_size_all = (wavelength * np.array(opt.cameralengths_eff() )) /(detector_pixels_all*size_pixel/1e6)/1e4 \n", + " detector_pixels_all = np.round(detector_cover_all/pixel_covers,1) \n", + " ptycho_pixel_size_all = (wavelength*np.array(cl_eff_all))/(detector_pixels_all*size_pixel/1e6)/1e4 \n", " else:\n", - " ptycho_pixel_size_all = (wavelength * np.array(opt.cameralengths_eff() )) /(num_pixels*size_pixel/1e6)/1e4\n", - " \n", - " probe_window_all = (wavelength*np.array(opt.cameralengths_eff())/100)/(size_pixel/1e6)/1000 # now in nm\n", + " ptycho_pixel_size_all = (wavelength*np.array(cl_eff_all))/(num_pixels/2*size_pixel/1e6)/1e4\n", + "\n", + " probe_window_all = (wavelength*np.array(cl_eff_all)/100)/(size_pixel/1e6)/1000 # now in nm\n", " usable_probe_semi_window_all = probe_window_all/4\n", " detector_cover_a_all = detector_cover_all/semi_angle_corr\n", " max_defocus_all = (usable_probe_semi_window_all)/np.tan(semi_angle_corr/1000)\n", " max_defocus_all[max_defocus_all < 0] = 'nan'\n", - " omega = np.linspace(1e-6,2,100) \n", - " pctf = pty.get_ssb_ctf()\n", - " apertury = opt.apertures()\n", " oversampling_all = (wavelength/1000)/(2*pixel_covers/1000*step_size_corr)\n", - " \n", - "\n", - " \n", - "\n", - " ### SAMPLE PLANE ##########################################\n", - " if overlap_fig == 'Geometrical': \n", - " wid = np.linspace(-beam_pos/2,beam_pos/2,beam_pos+1) * step_size_corr\n", - " yyy = np.append(np.linspace(0,overlap,100), 200)\n", - " \n", - " fig5 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", - " fig5.update_xaxes(title_text=\"Sample plane (nm)\", range=[-fov_show/2, fov_show/2], showgrid=False, zeroline=False)\n", - " fig5.update_yaxes(range=[-fov_show/2, fov_show/2],showgrid=False, showticklabels=False)\n", - " \n", - " for x in range(len(wid)):\n", - " fig5.add_trace(go.Scatter(showlegend=False, x=wid, y=np.ones(len(wid))*wid[x], marker_color='black'),secondary_y=False)\n", - " \n", - " for x in range(len(wid)): \n", - " for y in range(len(wid)): \n", - " fig5.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.1, fillcolor=\"#FF7F7F\",name=False, x0=wid[x]-beam_diameter/2, y0=wid[y]-beam_diameter/2, x1=wid[x]+beam_diameter/2, y1=wid[y]+beam_diameter/2, line_color=\"red\",secondary_y=False)\n", - " \n", - " fig5.add_annotation(x=-1*step_size_corr, y=-2*step_size_corr, ax=-2*step_size_corr, ay=-2*step_size_corr, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='red')\n", - " fig5.add_annotation(x=-2*step_size_corr, y=-1*step_size_corr, ax=-2*step_size_corr, ay=-2*step_size_corr, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='red')\n", - " fig5.add_annotation(x=2*step_size_corr-0.75*beam_diameter/2, y=-2*step_size_corr-0.75*beam_diameter/2, ax=2*step_size_corr, ay=-2*step_size_corr,xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='magenta')\n", - " fig5.add_annotation(x=2*step_size_corr+0.75*beam_diameter/2, y=-2*step_size_corr+0.75*beam_diameter/2, ax=2*step_size_corr, ay=-2*step_size_corr,xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='magenta')\n", - " fig5.add_trace(go.Scatter(showlegend=True, x=[-1], y=[-1],marker_size=12, marker_color='red', name='Step size '+str(np.round(10*step_size_corr,2))+' Å')) \n", - " fig5.add_trace(go.Scatter(showlegend=True, x=[-1], y=[-1],marker_size=12, marker_color='magenta', name='Beam ⌀ '+str(np.round(10*beam_diameter,2))+' Å')) \n", - " \n", - " if method == 'direct':\n", - " xx = wavelength/(np.sin(semi_angle_corr*omega/1000))/100\n", - " fig5.add_trace(go.Scatter(showlegend=True, x=[-1], y=[-1],marker_size=12, marker_color='green', name='Rec step '+str(np.round(xx[-1]/3,2))+' Å')) \n", - " fig5.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.0,xanchor=\"right\",x=0.9))\n", - "\n", - " fig5.add_trace(go.Scatter(showlegend=False, x = -fov_show/2*np.ones(len(yyy)), y=yyy, opacity=1,mode='markers',marker_symbol = \"triangle-down\",marker=dict(size=20, color=yyy, colorscale='rainbow_r', showscale=False)),secondary_y=True) \n", - " fig5.update_yaxes(range=[0, 100], showgrid=False, showticklabels=False, secondary_y=True)\n", - " fig5.update_yaxes(title_text=\"Overlap (%)\", showgrid=False, showticklabels=True, tickvals = [-fov_show/2, -fov_show/4, 0, fov_show/4, fov_show/2],ticktext = ['0', '25', '50', '75', '100'], secondary_y=False)\n", - " fig5.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9))\n", - " fig5.update_layout(plot_bgcolor='white')\n", - " fig5.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig5.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - "\n", - " if method == 'direct':\n", - " fig5.update_layout(width=3.6*graph_size, height=4*graph_size, margin =dict(l=0.6*graph_size, r=0.3*graph_size, t=0.1*graph_size, b=0.7*graph_size))\n", - " fig5.update_layout(title={'text': \"Sample\",'y': 0.87, 'x': 0.17,'xanchor': 'left','yanchor': 'top'})\n", - " if method == 'iterative':\n", - " fig5.update_layout(legend=dict(orientation=\"h\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=1))\n", - " fig5.update_layout(title={'text': \"Sample\",'y': 0.98, 'x': 0.14,'xanchor': 'left','yanchor': 'top'})\n", - " fig5.update_layout(width=4.1*graph_size, height=3.1*graph_size, margin =dict(l=1.3*graph_size, r=0.0*graph_size, t=0.1*graph_size, b=0))\n", "\n", "\n", - " elif overlap_fig == 'Intensity':\n", - "\n", - " ### INTENSIY DISTRIBUTION ##################################\n", - " # create a text trap and redirect stdout\n", - " text_trap = io.StringIO()\n", - " sys.stdout = text_trap\n", - " \n", - " sampling= 0.02 # sampling of the simulated potential in A\n", - "\n", - " probe = Probe(sampling = sampling, extent = 2*beam_diameter*10, energy = beam*1e3, semiangle_cutoff = semi_angle_corr, defocus = defocus*10)\n", - " # probe = Probe(sampling=sampling, extent= A , energy=beam*1e3 eV, semiangle_cutoff = mrad, defocus= A)\n", - " intensity = probe.build().intensity().compute()\n", - " intensity = intensity.array\n", - " intensity = np.abs(intensity)\n", - " # # now restore stdout function\n", - " sys.stdout = sys.__stdout__\n", - "\n", - " x_pix = int(step_size_corr*10/sampling) # step size from nm to A\n", - " field = np.zeros([intensity.shape[0]+(beam_pos)*x_pix, intensity.shape[1]+(beam_pos)*x_pix])\n", - " cen = int(intensity.shape[0]/2)\n", - " \n", - " for i in range(0,beam_pos+1):\n", - " for j in range(0,beam_pos+1):\n", - " xx = x_pix*i\n", - " xy = x_pix*j\n", - " field[xy : intensity.shape[0]+xy, xx : intensity.shape[0]+xx] = field[xy : intensity.shape[0]+xy, xx : intensity.shape[0]+xx] + intensity\n", - "\n", - " field_size = int(field.shape[0]) \n", - " field_cen = int(field.shape[0]/2)\n", - " middle = field[int(field_cen-(x_pix*(beam_pos)*red_box)): int(field_cen+(x_pix*(beam_pos)*red_box)), int(field_cen-(x_pix*(beam_pos)*red_box)): int(field_cen+(x_pix*(beam_pos)*red_box))]\n", - " uniformity = (1-(np.max(middle)-np.min(middle)) / (np.max(field)-np.min(field)))*100\n", - " \n", - " fig5 = go.Figure() \n", - " fig5.add_trace(px.imshow(field).data[0],)\n", - " fig5.add_shape(type=\"rect\",x0= field_cen-red_box*field_size, y0=field_cen-red_box*field_size, x1= field_cen+red_box*field_size, y1=field_cen+red_box*field_size,line=dict(color=box_col),)\n", - " fig5.update_layout(title={'text': \"Uniformity: \"+str(np.round(uniformity,1))+\"%\",'y':0.96, 'x':0.35,'xanchor': 'left','yanchor': 'top'})\n", - " fig5.update_traces(dict(showscale=False, coloraxis=None, colorscale='plasma'), selector={'type':'heatmap'})\n", - " fig5.update_yaxes(showticklabels=False)\n", - " fig5.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig5.update_xaxes(title_text=\"Sample plane (nm)\", showgrid=False, showticklabels=True, tickvals = [0, field.shape[0]/2, field.shape[0]-1], \n", - " ticktext = [0, np.round((field.shape[0]/2)*sampling,1), np.round((field.shape[0]-1)*sampling,1)])\n", - "\n", - " if method == 'direct':\n", - " fig5.update_layout(width=3.2*graph_size, height=3.2*graph_size, margin =dict(l=0.4*graph_size, r=0.05*graph_size, t=0.3*graph_size, b=0))\n", - "\n", - " if method == 'iterative':\n", - " fig5.update_layout(width=3.9*graph_size, height=3.1*graph_size, margin =dict(l=1.3*graph_size, r=0.2*graph_size, t=0.3*graph_size, b=0))\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " ### DETECTOR PLANE ##########################################\n", - " fig6 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", - " # fig6.update_xaxes(title_text=\"\", range=[0.5, num_pixels+0.5], tickvals = [1, num_pixels/2+0.5, num_pixels], ticktext = [1, \"Detector pixel array\", num_pixels], showticklabels=True,showgrid=True) \n", - "\n", - " fig6.update_xaxes(title_text=\"Detector pixel array\", range=[0.5, num_pixels+0.5], tickvals = [1, num_pixels/2+0.5, num_pixels], ticktext = [1, num_pixels/2, num_pixels], showticklabels=True,showgrid=True) \n", - " fig6.update_yaxes(range=[0.5, num_pixels+0.5], showticklabels=False, showgrid=False, secondary_y=False)\n", - " fig6.add_shape(type=\"circle\",xref=\"x\", yref=\"y\",opacity=0.5, fillcolor=\"#FF7F7F\", x0=(num_pixels+1)/2-beam_diameter_pix/2, y0=(num_pixels+1)/2-beam_diameter_pix/2, x1=(num_pixels+1)/2+beam_diameter_pix/2, y1=(num_pixels+1)/2+beam_diameter_pix/2,line_color=\"red\",secondary_y=False)\n", - " fig6.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.5, fillcolor=\"#f0f921\", x0=0.5, y0=0.5, x1=1.5, y1=1.5,line_color=\"#000004\",secondary_y=False)\n", - " fig6.add_trace(go.Scatter(showlegend=True, x=[0], y=[0],marker_size=12, marker_color='#FF7F7F', name='Cover angle '+str(np.round(detector_cover,1))+' mrad', opacity = 0)) \n", - " fig6.add_annotation(x=(num_pixels+1)/2-beam_diameter_pix/2, y=(num_pixels+1)/2, ax=(num_pixels+1)/2+beam_diameter_pix/2, ay=(num_pixels+1)/2, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='black')\n", - " fig6.add_annotation(x=(num_pixels+1)/2+beam_diameter_pix/2,y=(num_pixels+1)/2, ax=(num_pixels+1)/2-beam_diameter_pix/2, ay=(num_pixels+1)/2, xref='x',yref='y',axref='x',ayref='y', text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='black')\n", - " fig6.add_annotation(x=(num_pixels+1)/2, y=(num_pixels+1)/2, text=str(np.round(beam_diameter_pix,1))+\" pix\", showarrow=False, yshift=10)\n", - " fig6.add_annotation(x=1, y=1, text=str(np.round(size_pixel,2))+\" μm ≈ \" +str(np.round(pixel_angle,4))+\" mrad\", showarrow=False, xshift=70+(50/np.sqrt(num_pixels)), yshift=10+(50/np.sqrt(num_pixels)))\n", - " fig6.add_trace(go.Scatter(showlegend=False,x=[-1], y=[-1]),secondary_y=True)\n", - " fig6.update_yaxes(title_text=\"\", range=[-1, 1], showticklabels=False, showgrid=False, tickvals = [-1, 0, 0.85], ticktext = [\"\", \"Max cover angle (mrad)\", str(np.round(detector_cover,1))], secondary_y=True) \n", - " fig6.update_yaxes(tickangle=-90)\n", - " fig6.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9))\n", - " fig6.update_layout(plot_bgcolor='white')\n", - " fig6.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig6.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig6.update_layout(title={'text': \"Detector\",'y':0.975, 'x': 0.09,'xanchor': 'left','yanchor': 'top'})\n", - " fig6.update_layout(width=2.9*graph_size, height=3.1*graph_size, margin =dict(l=0.1*graph_size, r=0.1*graph_size, t=0.1*graph_size, b=0)) \n", - " \n", - " focusdepth = wavelength/(semi_angle_corr/1000)**2/1000\n", - " ssb_cl, kolik = pty.cl4ssb(detector_cover_a_all)\n", - "\n", - "\n", - " \n", - " ### MICROSCOPE SCHEME ##########################################\n", - " width = 500 # in-graph setting\n", + " ### MICROSCOPE SCHEME\n", + " width = 550 # in-graph setting\n", " det_width = 400 # in-graph setting\n", - " y_down = np.log(np.max(opt.cameralengths()))\n", " reduc = 0.4 # in-graph setting\n", + " defo = np.power(defocus,0.4)/100\n", + " y_down = np.log(np.max(cl_all))\n", + " ssb_cl, kolik = pty.get_cl4ssb(detector_cover_a_all, camera, \"nominal\")\n", + " focusdepth = wavelength/(semi_angle_corr/1000)**2/1000\n", + " y = -np.log(cl)*np.ones(int(num_pixels)+1)\n", + " x = np.linspace(-det_width, det_width, int(num_pixels)+1)\n", " \n", - " fig8 = go.Figure() \n", - " fig8.update_xaxes(range=[-width, width], showticklabels=False,zeroline=False)\n", - " fig8.update_yaxes(range=[-y_down, reduc*y_down], showticklabels=False,)\n", - " fig8.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.05, fillcolor=\"gray\", x0=-width, y0=-y_down, x1=width, y1=reduc*y_down,line_color=\"gray\")\n", - " fig8.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.7, fillcolor=\"red\", x0=-100, y0=reduc*0.8*y_down, x1=100, y1=reduc*0.9*y_down,line_color=\"red\")\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-150, -2*semi_angle, None, 2*semi_angle, 150], y=[reduc*0.8*y_down,reduc*0.8*y_down,None,reduc*0.8*y_down, reduc*0.8*y_down],mode='lines', line=dict(color='black',width=7)))\n", - " fig8.add_annotation(x=-0.7*width, y=reduc*0.8*y_down, text=\"Aperture \", showarrow=False, yshift=2)\n", - " fig8.add_annotation(x=-0.7*width, y=reduc*0.8*y_down, text=str(aperture), showarrow=False, yshift=-15)\n", - " fig8.add_annotation(x=0.0*width, y=-y_down,text='Acquisition time (s) '+ str(np.round(matrix*matrix*dwell_time/1e6,1)), showarrow=False, yshift=-10)\n", - " fig8.add_annotation(x=0, y=reduc*0.96*y_down,text='λ (pm) '+ str(np.round((pty.get_wavelength(beam)*1e12),2)), showarrow=False, yshift=0)\n", - "\n", - " if defocus > 0:\n", - " defo = np.log(defocus)/100\n", - " else:\n", - " defo = 0 \n", + " fig = go.Figure() \n", + " fig.update_xaxes(range=[-width, width], showticklabels=False,zeroline=False)\n", + " fig.update_yaxes(range=[-y_down, reduc*y_down], showticklabels=False)\n", + " fig.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.05, fillcolor=\"gray\", x0=-width, y0=-y_down, x1=width, y1=reduc*y_down,line_color=\"gray\")\n", + " fig.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.7, fillcolor=\"red\", x0=-100, y0=reduc*0.8*y_down, x1=100, y1=reduc*0.9*y_down,line_color=\"red\")\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-150, -2*semi_angle, None, 2*semi_angle, 150], y=[reduc*0.8*y_down,reduc*0.8*y_down,None,reduc*0.8*y_down, reduc*0.8*y_down],mode='lines', line=dict(color='black',width=7)))\n", + " fig.add_annotation(x=-0.7*width, y=reduc*0.8*y_down, text=\"Aperture \", showarrow=False, yshift=2)\n", + " fig.add_annotation(x=-0.2*width, y=reduc*0.8*y_down, text=str(aperture), showarrow=False, yshift=-15)\n", + " fig.add_annotation(x=0, y=-y_down,text='Net acquisition time (s) '+ str(np.round(matrix*matrix*dwell_time/1e6,1)),showarrow=False,yshift=-10)\n", + " fig.add_annotation(x=0, y=reduc*0.96*y_down,text='λ (pm) '+ str(np.round(wavelength,2)),showarrow=False,yshift=0)\n", "\n", " # Beam\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, 2*semi_angle, 0, 0], y=[defo*y_down, reduc*0.8*y_down, reduc*0.8*y_down, defo*y_down], mode='lines',fill=\"toself\", fillcolor=\"#FF7F7F\", opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, 0, -2*semi_angle, 0], y=[defo*y_down, reduc*0.8*y_down, reduc*0.8*y_down, defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"red\", opacity=0.7,line=dict(color='red',width=1)))\n", - " fig8.add_annotation(x=0, y=reduc*0.5*y_down,text=\"Current \"+str(np.round(current,1))+\" pA\", showarrow=True,ax=70, ay=0, yshift=0)\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, 2*semi_angle, 0, 0], y=[defo*y_down, reduc*0.8*y_down, reduc*0.8*y_down, defo*y_down], mode='lines',fill=\"toself\", fillcolor=\"#FF7F7F\", opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, 0, -2*semi_angle, 0], y=[defo*y_down, reduc*0.8*y_down, reduc*0.8*y_down, defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"red\", opacity=0.7,line=dict(color='red',width=1)))\n", + " fig.add_annotation(x=-0.05*width, y=0, ax=-0.05*width, ay=defo*y_down, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=1,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", + " fig.add_annotation(x=-0.05*width, y=defo*y_down, ax=-0.05*width, ay=0, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=1,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", + " fig.add_annotation(x=-0.3*width, y=0.05*y_down,text=\"Δf \"+str(np.round(defocus,1))+\" nm\", showarrow=False)\n", + " fig.add_annotation(x=0, y=reduc*0.5*y_down,text=\"Current \"+str(np.round(current,1))+\" pA\", showarrow=True,ax=90, ay=0, yshift=0)\n", + " fig.add_annotation(x=0, y=reduc*0.5*y_down,text=\"e per spot \"+str(np.round(e_per_scan,1)), showarrow=True,ax=90, ay=0, yshift=-20)\n", + " fig.add_annotation(x=-1.7*det_width, y=reduc*0.5*y_down, ax=-0.5*det_width, ay=reduc*0.5*y_down, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=3,arrowsize=2,arrowwidth=2,arrowcolor='black')\n", " \n", - " if defocus > 0:\n", - " fig8.add_annotation(x=-0.05*width, y=0, ax=-0.05*width, ay=defo*y_down, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=1,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", - " fig8.add_annotation(x=-0.05*width, y=defo*y_down, ax=-0.05*width, ay=0, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=1,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", - " fig8.add_annotation(x=-0.3*width, y=0.05*y_down,text=\"Δf \"+str(np.round(defocus,1))+\" nm\", showarrow=False)\n", - "\n", " # Sample\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-0.8*width, 0.8*width], y=[0, 0], line=dict(color='magenta',width=7), opacity=0.5))\n", - " fig8.add_annotation(x=-0.7*width, y=0,text=\"Sample\", showarrow=False, yshift=15)\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-np.log(fov)/20*width, np.log(fov)/20*width, np.log(fov)/20*width, -np.log(fov)/20*width, -np.log(fov)/20*width], y=[-0.01*y_down, -0.01*y_down, 0.01*y_down, 0.01*y_down, -0.01*y_down],mode='lines', fill=\"toself\", fillcolor=\"black\", line=dict(color='black',width=1), opacity=0.5))\n", - " fig8.add_annotation(x=0.4*width, y=0.05*y_down,text=\"FoV \"+str(np.round(fov,2))+\" nm\", showarrow=False, yshift=0)\n", - " fig8.add_annotation(x=0.5*width, y=0.05*y_down,text=\"Dose \"+str(np.round(dose,1))+\" e/Å2\", showarrow=False, yshift=-40)\n", - " fig8.add_annotation(x=-0.5*width, y=0.05*y_down,text=\"DoF \"+str(np.round(focusdepth,1))+\" nm\", showarrow=False, yshift=-40)\n", - " # Detector\n", - " y = -np.log(cl)*np.ones(int(num_pixels)+1)\n", - " x = np.linspace(-det_width,det_width, int(num_pixels)+1)\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=x, y=y, mode='markers', marker_symbol=\"line-ns\",marker_line_width=0.5))\n", - " fig8.add_annotation(x=-0.7*width, y=-np.log(cl),text=\"Detector\", showarrow=False,align= 'left', yshift=15)\n", - " fig8.add_annotation(x=-0.7*width, y=-np.log(cl),text=str(np.round(cl_det,2))+' cm', showarrow=False,align= 'left', yshift=-15) \n", - " # Scattering\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, det_width, -det_width, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"gray\", opacity=0.1,line=dict(color='black',width=1)))\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, -det_width, det_width, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"gray\", opacity=0.1,line=dict(color='black',width=1)))\n", - " # BF disk\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, det_width/covered_alfas, -det_width/covered_alfas, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"#FF7F7F\", opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[0, -det_width/covered_alfas, det_width/covered_alfas, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines', fill=\"toself\", fillcolor=\"red\", opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", - "\n", - " if method == 'direct':\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-width, width], y=[-np.log(ssb_cl), -np.log(ssb_cl)], opacity=0.8, line=dict(color='green',width=3)))\n", - " fig8.add_annotation(x=0*width, y=-np.log(ssb_cl),text=\"\", showarrow=False,align= 'left', yshift=15)\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-0.8*width, 0.8*width], y=[0, 0], line=dict(color='magenta',width=7), opacity=0.5))\n", + " fig.add_annotation(x=-0.7*width, y=0,text=\"Sample\", showarrow=False, yshift=15, xshift =-8)\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-np.log(fov)/20*width, np.log(fov)/20*width, np.log(fov)/20*width, -np.log(fov)/20*width, -np.log(fov)/20*width], y=[-0.01*y_down, -0.01*y_down, 0.01*y_down, 0.01*y_down, -0.01*y_down],mode='lines', fill=\"toself\", fillcolor=\"black\", line=dict(color='black',width=1), opacity=0.5))\n", + " fig.add_annotation(x=0.4*width, y=0.05*y_down,text=\"FoV \"+str(np.round(fov,2))+\" nm\", showarrow=False, yshift=0)\n", + " fig.add_annotation(x=0.5*width, y=0.05*y_down,text=\"Dose \"+str(np.round(dose,1))+\" e/Å2\", showarrow=False, yshift=-40)\n", + " fig.add_annotation(x=-0.5*width, y=0.05*y_down,text=\"DoF \"+str(np.round(focusdepth,1))+\" nm\", showarrow=False, yshift=-40)\n", + " fig.add_annotation(x=1.7*det_width, y=0, ax=np.log(fov)/20*width, ay=0, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=3,arrowsize=2,arrowwidth=2,arrowcolor='black')\n", " \n", - " if restriction == True:\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-250, -4*semi_angle, None, 4*semi_angle, 250], y=[-reduc*0.2*y_down,-reduc*0.2*y_down,None,-reduc*0.2*y_down, -reduc*0.2*y_down],mode='lines', line=dict(color='black',width=7)))\n", - " fig8.add_annotation(x=-0.35*width, y=-reduc*0.2*y_down,text=\"PAAR\", showarrow=False,align= 'left', yshift=-15)\n", + " # Detector\n", + " fig.add_trace(go.Scatter(showlegend=False, x=x, y=y, mode='markers', marker_symbol=\"line-ns\",marker_line_width=0.5))\n", + " fig.add_annotation(x=-0.5*width, y=-np.log(cl),text=\"Detector\", showarrow=False,align= 'left', yshift=15)\n", + " fig.add_annotation(x=-1.7*det_width, y=-np.log(cl), ax=-det_width, ay=-np.log(cl), xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=3,arrowsize=2,arrowwidth=2,arrowcolor='black',yshift=0)\n", + "\n", + " # Scattering\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, det_width, -det_width, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines',fill=\"toself\",fillcolor=\"gray\",opacity=0.1,line=dict(color='black',width=1)))\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, -det_width, det_width, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines',fill=\"toself\",fillcolor=\"gray\",opacity=0.1,line=dict(color='black',width=1)))\n", + " \n", + " # BF disk\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, det_width/covered_alfas, -det_width/covered_alfas, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines',fill=\"toself\",fillcolor=\"#FF7F7F\",opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[0, -det_width/covered_alfas, det_width/covered_alfas, 0], y=[defo*y_down, -np.log(cl), -np.log(cl), -np.log(cl), defo*y_down],mode='lines',fill=\"toself\",fillcolor=\"red\",opacity=0.7,line=dict(color='#FF7F7F',width=1)))\n", + "\n", + " if method == 'ssb':\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-width, width], y=[-np.log(ssb_cl), -np.log(ssb_cl)], opacity=0.8, line=dict(color='green',width=3)))\n", + " fig.add_annotation(x=0*width, y=-np.log(ssb_cl),text=\"\", showarrow=False, align= 'left', yshift=15)\n", + " if restr == True:\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-250, -4*semi_angle, None, 4*semi_angle, 250], y=[-reduc*0.2*y_down,-reduc*0.2*y_down,None,-reduc*0.2*y_down, -reduc*0.2*y_down],mode='lines', line=dict(color='black',width=7)))\n", + " fig.add_annotation(x=-0.35*width, y=-reduc*0.2*y_down,text=\"PAAR\", showarrow=False,align= 'left', yshift=-15)\n", " \n", " # Cover\n", - " fig8.add_annotation(x=0, y=-1.05*np.log(cl), ax=det_width, ay=-1.05*np.log(cl), xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=3,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", - " fig8.add_annotation(x=det_width,y=-1.05*np.log(cl), ax=0, ay=-1.05*np.log(cl), xref='x',yref='y',axref='x',ayref='y', text='', showarrow=True,arrowhead=3,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", - " fig8.add_annotation(x=det_width/2, y=-1.05*np.log(cl), text=\"Cover \"+str(np.round(detector_cover,1)) + \" mrad;\" + str(np.round(covered_alfas,1))+\"α\", showarrow=False, yshift=-10, xshift=-10)\n", - "\n", + " fig.add_annotation(x=0, y=-np.log(cl), ax=det_width, ay=-np.log(cl), xref='x',yref='y',axref='x',ayref='y', text='', showarrow=True,arrowhead=3,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", + " fig.add_annotation(x=det_width,y=-np.log(cl), ax=0, ay=-np.log(cl), xref='x',yref='y',axref='x',ayref='y', text='', showarrow=True,arrowhead=3,arrowsize=1,arrowwidth=1,arrowcolor='black')\n", + " fig.add_annotation(x=det_width/2, y=-np.log(cl), text=str(np.round(detector_cover,1)) + \" mrad or \" + str(np.round(covered_alfas,1))+\"α\", showarrow=False, yshift=15, xshift=0)\n", + " \n", " # CLs\n", - " fig8.add_annotation(x=0.85*width, y=-np.log(1.5),text=\"CL cm\", showarrow=False, yshift=0)\n", - " for x in opt.cameralengths():\n", - " fig8.add_trace(go.Scatter(showlegend=False, x=[-width, width], y=[-np.log(x), -np.log(x)], opacity=0.3, line=dict(color='gray',width=1)))\n", - " fig8.add_annotation(x=0.9*width, y=-np.log(x),text=str(x), showarrow=False, yshift=8)\n", - "\n", - " fig8.update_xaxes(title_text=\"\")\n", - " fig8.update_layout(width=3.5*graph_size, height=7.2*graph_size, margin = dict(l=0.3*graph_size, r=0, t=0.0*graph_size, b=0))\n", - " fig8.update_layout(plot_bgcolor='white')\n", - "\n", - "\n", - " \n", - " ### METHODS ########################################## \n", - " if method == 'direct':\n", + " xx = 0\n", + " for x in cl_all:\n", + " if xx == 0:\n", + " fig.add_annotation(x=-0.7*width, y=-np.log(x),text=\"Nominal CL\", showarrow=False, yshift=50)\n", + " fig.add_annotation(x=-0.7*width, y=-np.log(x),text=\"(cm)\", showarrow=False, yshift=35)\n", + " fig.add_annotation(x= 0.7*width, y=-np.log(x),text=\"Effective CL\", showarrow=False, yshift=50)\n", + " fig.add_annotation(x= 0.7*width, y=-np.log(x),text=\"(cm)\", showarrow=False, yshift=35)\n", + " fig.add_trace(go.Scatter(showlegend=False, x=[-width, width], y=[-np.log(x), -np.log(x)], opacity=0.3, line=dict(color='gray', width=1)))\n", + " fig.add_annotation(x=-0.9*width, y=-np.log(x), text=str(x), showarrow=False, yshift=8)\n", + " fig.add_annotation(x=0.85*width, y=-np.log(x), text=str(np.round(cl_eff_all[xx],1)), showarrow=False, yshift=8)\n", + " xx +=1\n", " \n", - " xx = wavelength/(np.sin(semi_angle_corr*omega/1000))/100 # pitch size\n", - " \n", - " ### PROBE ##########################################\n", - " fig = go.Figure() \n", - " fig.update_yaxes(title_text=\"Transfer (-)\")\n", - "\n", - " if ctf_xaxis == 'α': \n", - " fig.add_trace(go.Scatter(showlegend=True, x=omega, y=pctf, marker_color='red', name='Common for all',))\n", - " fig.update_xaxes(title_text=\"Scattering angle (α)\", range=[0, 2], zeroline=False)\n", - " \n", - " if ctf_xaxis == 'mrad': \n", - " for x in apertury:\n", - " fig.add_trace(go.Scatter(showlegend=False, x=pty.get_angle_corr(x) *omega, y=pctf, marker_color='black', name='SSB-CTF',))\n", - "\n", - " fig.add_trace(go.Scatter(showlegend=False, x=semi_angle_corr*omega, y=pctf, marker_color='red'))\n", - " fig.update_layout(legend=dict(orientation=\"h\",yanchor=\"bottom\",y=0.85,xanchor=\"right\",x=1))\n", - " fig.update_xaxes(title_text=\"Spacial frequency (mrad)\", range=[0, 60], zeroline=False)\n", - " \n", - " elif ctf_xaxis == 'Å':\n", - " for x in apertury:\n", - " d = wavelength/(np.sin(pty.get_angle_corr(x)*omega/1000))/100 # Full pitch size\n", - " fig.add_trace(go.Scatter(showlegend=False, x=d, y=pctf, marker_color='black', name='SSB-CTF',))\n", - "\n", - " fig.add_trace(go.Scatter(showlegend=False, x=xx, y=pctf, marker_color='red'))\n", - " fig.update_xaxes(title_text=\"Real space distance (Å)\", range=[-1, 2], type=\"log\", zeroline=False)\n", - "\n", - " fig.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9))\n", - " fig.update_layout(title={'text': \"PCTF\",'y':0.7, 'x':0.28,'xanchor': 'left','yanchor': 'top'})\n", - " fig.update_layout(plot_bgcolor='white')\n", - " fig.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig.update_yaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig.update_layout(width=4.95*graph_size, height=3.3*graph_size, margin = dict(l=1.3*graph_size, r=0.25*graph_size, t=1.2*graph_size, b=0.3*graph_size))\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " ### CAMERA LENGTH GRAPH ##########################################\n", - " fig4 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", - " fig4.add_trace(go.Scatter(showlegend=False, x=opt.cameralengths(), y=detector_cover_all, marker_color='black'), secondary_y=False,)\n", - " fig4.add_trace(go.Scatter(showlegend=False, x=opt.cameralengths(), y=detector_cover_a_all,marker_color='black'), secondary_y=True,)\n", - " fig4.add_trace(go.Scatter(x=np.array(cl), y=np.array(covered_alfas), marker_size=12, marker_color='red', name = str(np.round(detector_cover,1))+ \" mrad; \"+str(np.round(covered_alfas,2))+ \" α\"), secondary_y=True,) \n", - " fig4.add_trace(go.Scatter(x=np.array(ssb_cl), y=np.array(kolik),marker_size=12, marker_color='green', name = \"Recommended CL\"), secondary_y=True,) \n", - " fig4.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=0.75,xanchor=\"right\",x=0.9))\n", - " fig4.update_xaxes(title_text=\"Nominal camera length (cm)\", type=\"log\", tickvals = opt.cameralengths())\n", - " fig4.update_layout(xaxis = dict(tickmode = 'array', tickvals = [1, num_pixels/4, num_pixels/2, 3*num_pixels/4, num_pixels]))\n", - " fig4.update_yaxes(title_text=\" Cover angle (mrad)\", range=[0, 1.1*np.max(detector_cover_all)], secondary_y=False)\n", - " fig4.update_yaxes(title_text=\" Cover angle (α)\", range=[0, 1.1*np.max(detector_cover_a_all)], showgrid=False, secondary_y=True)\n", - " fig4.update_layout(xaxis = dict(tickmode = 'array', tickvals = opt.cameralengths()))\n", - " fig4.update_layout(width=5.25*graph_size, height=3*graph_size, margin =dict(l=1.3*graph_size, r=0.25*graph_size, t=0.3*graph_size, b=0.3*graph_size))\n", - " fig4.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9), plot_bgcolor='white')\n", - " fig4.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig4.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig4.update_layout(title={'text': \"CL\",'y':0.87, 'x':0.26,'xanchor': 'left','yanchor': 'top'})\n", + " fig.add_annotation(x=width, y=-np.log(cl_all[0]), ax=width, ay=-np.log(cl_all[-1]), xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=0,arrowsize=2,arrowwidth=2,arrowcolor='gray',yshift=0)\n", + " fig.add_annotation(x=1.7*det_width, y=-(np.log(cl_all[0])+np.log(cl_all[-1]))/2,ax=width, ay=-(np.log(cl_all[0])+np.log(cl_all[-1]))/2, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=3,arrowsize=2,arrowwidth=2,arrowcolor='black')\n", + " fig.update_xaxes(title_text=\"\")\n", + " fig.update_layout(plot_bgcolor='white',width=4.1*graph_size, height=7.2*graph_size, margin = dict(l=0.45*graph_size, r=0.45*graph_size, t=0.0*graph_size, b=0))\n", + "\n", + " ### SAMPLE PLANE\n", + " match overlap_fig: \n", + " case 'Geometrical':\n", + " wid = np.linspace(-beam_pos/2,beam_pos/2,beam_pos+1)*step_size_corr\n", + " yyy = np.append(np.linspace(0,overlap,100),200)\n", + " \n", + " fig1 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", + " fig1.update_xaxes(title_text=\"Sample plane (nm)\", range=[-fov_show/2, fov_show/2], showgrid=False, zeroline=False)\n", + " fig1.update_yaxes(range=[-fov_show/2, fov_show/2],showgrid=False, showticklabels=False)\n", + " \n", + " for x in range(len(wid)): \n", + " fig1.add_trace(go.Scatter(showlegend=False, x=wid, y=np.ones(len(wid))*wid[x], marker_color='black'),secondary_y=False)\n", + " for y in range(len(wid)): \n", + " fig1.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.1, fillcolor=\"#FF7F7F\",name=False, x0=wid[x]-beam_diameter/2, y0=wid[y]-beam_diameter/2, x1=wid[x]+beam_diameter/2, y1=wid[y]+beam_diameter/2, line_color=\"red\",secondary_y=False)\n", + " \n", + " fig1.add_annotation(x=-1*step_size_corr, y=-2*step_size_corr, ax=-2*step_size_corr, ay=-2*step_size_corr, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='red')\n", + " fig1.add_annotation(x=-2*step_size_corr, y=-1*step_size_corr, ax=-2*step_size_corr, ay=-2*step_size_corr, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='red')\n", + " fig1.add_annotation(x=2*step_size_corr-0.75*beam_diameter/2, y=-2*step_size_corr-0.75*beam_diameter/2, ax=2*step_size_corr, ay=-2*step_size_corr,xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='blue')\n", + " fig1.add_annotation(x=2*step_size_corr+0.75*beam_diameter/2, y=-2*step_size_corr+0.75*beam_diameter/2, ax=2*step_size_corr, ay=-2*step_size_corr,xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='blue')\n", + " fig1.add_trace(go.Scatter(showlegend=True, x=[-100], y=[-100],marker_size=12, marker_color='red', name='Step '+str(np.round(10*step_size_corr,2))+' Å')) \n", + " fig1.add_trace(go.Scatter(showlegend=True, x=[-100], y=[-100],marker_size=12, marker_color='blue', name='Beam ⌀ '+str(np.round(10*beam_diameter,2))+' Å')) \n", + " \n", + " if method == 'ssb':\n", + " omega, pctf = pty.get_ssb_ctf()\n", + " xx = wavelength/(np.sin(semi_angle_corr*omega/1000))/100\n", + " fig1.add_trace(go.Scatter(showlegend=True, x=[-1], y=[-1],marker_size=12, marker_color='green', name='Rec step '+str(np.round(xx[-1]/3,2))+' Å')) \n", + " fig1.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.0,xanchor=\"right\",x=0.9))\n", + "\n", + " fig1.add_trace(go.Scatter(showlegend=False, x = -fov_show/2*np.ones(len(yyy)), y=yyy, opacity=1,mode='markers',marker_symbol = \"triangle-down\",marker=dict(size=20, color=yyy, colorscale='rainbow_r', showscale=False)),secondary_y=True) \n", + " fig1.update_yaxes(range=[0, 100], showgrid=False, showticklabels=False, secondary_y=True)\n", + " fig1.update_yaxes(title_text=\"Overlap (%)\", showgrid=False, showticklabels=True, tickvals = [-fov_show/2, -fov_show/4, 0, fov_show/4, fov_show/2],ticktext = ['0', '25', '50', '75', '100'], secondary_y=False)\n", + " fig1.update_layout(plot_bgcolor='white', legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9))\n", + " fig1.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig1.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + "\n", + " match method: \n", + " case 'ssb':\n", + " fig1.update_layout(width=3.6*graph_size, height=4*graph_size, margin =dict(l=0.6*graph_size, r=0.3*graph_size, t=0.1*graph_size, b=0.7*graph_size))\n", + " fig1.update_layout(title={'text': \"Sample\",'y': 0.87, 'x': 0.17,'xanchor': 'left','yanchor': 'top'})\n", + " case 'iterative':\n", + " fig1.update_layout(legend=dict(orientation=\"h\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=1.0))\n", + " fig1.update_layout(title={'text': \"Sample\",'y': 0.92, 'x': 0.5,'xanchor': 'left','yanchor': 'top'})\n", + " fig1.update_layout(width=3.5*graph_size, height=3.7*graph_size, margin =dict(l=0.8*graph_size, r=0.0*graph_size, t=0.8*graph_size, b=0))\n", + "\n", + " case 'Ilumination':\n", + " if abtem == True:\n", + " sampling= 0.05 # sampling of the simulated potential in A\n", + " sys.stdout = io.StringIO() # create a text trap and redirect stdout\n", + " probe = Probe(sampling = sampling, extent = 2*beam_diameter*10, energy = beam_energy*1e3, semiangle_cutoff = semi_angle_corr, defocus = defocus*10) # sampling=sampling, extent=A , energy=beam*1e3eV, semiangle_cutoff=mrad, defocus=A)\n", + " intensity = probe.build().intensity().compute()\n", + " intensity = np.abs(intensity.array)\n", + " sys.stdout = sys.__stdout__ # now restore stdout function\n", + " x_pix = int(step_size_corr*10/sampling) # step size from nm to A\n", + " field = np.zeros([intensity.shape[0]+(beam_pos)*x_pix, intensity.shape[1]+(beam_pos)*x_pix])\n", + " cen = int(intensity.shape[0]/2)\n", + " \n", + " for i in range(0,beam_pos+1):\n", + " for j in range(0,beam_pos+1):\n", + " xx = x_pix*i\n", + " xy = x_pix*j\n", + " field[xy:intensity.shape[0]+xy,xx:intensity.shape[0]+xx]=field[xy:intensity.shape[0]+xy,xx:intensity.shape[0]+xx]+intensity\n", " \n", + " field_size =int(field.shape[0]) \n", + " field_cen = int(field.shape[0]/2)\n", + " middle = field[int(field_cen-(x_pix*(beam_pos)*red_box)):int(field_cen+(x_pix*(beam_pos)*red_box)),int(field_cen-(x_pix*(beam_pos)*red_box)):int(field_cen+(x_pix*(beam_pos)*red_box))]\n", + " uniformity = (1-(np.max(middle)-np.min(middle))/(np.max(field)-np.min(field)))*100\n", " \n", - " elif method == 'iterative': \n", - " ### PROBE ##########################################\n", - " pctf_norm = pctf_itr/np.max(pctf_itr)\n", - "\n", - " fig = go.Figure() \n", - " fig.update_yaxes(title_text=\"Transfer (-)\")\n", - " match ctf_xaxis: \n", - " case 'α':\n", - " fig.add_trace(go.Scatter(showlegend=False, x=omega_itr, y= pctf_norm, marker_color='red',))\n", - " fig.update_xaxes(title_text=\"Scattering angle (α)\", range=[0, 5], zeroline=False)\n", - " fig.update_yaxes(range=[0, 1.1])\n", - " \n", - " case 'mrad': \n", - " for x in apertury:\n", - " fig.add_trace(go.Scatter(showlegend=False, x=pty.get_angle_corr(x)*omega_itr, y=pctf_norm, marker_color='black', name='',))\n", - " \n", - " fig.add_trace(go.Scatter(showlegend=False, x=semi_angle_corr*omega_itr, y=pctf_norm, marker_color='red'))\n", - " fig.update_xaxes(title_text=\"Spacial frequency (mrad)\", range=[0, 100], zeroline=False)\n", - "\n", - " case 'Å':\n", - " for x in apertury:\n", - " d = wavelength/(np.sin(pty.get_angle_corr(x)*omega_itr/1000))/100\n", - " fig.add_trace(go.Scatter(showlegend=False, x=d, y=pctf_norm, marker_color='black', name='CTF'))\n", - " \n", - " xx = wavelength/(np.sin(semi_angle_corr*omega_itr/1000))/100\n", - " fig.add_trace(go.Scatter(showlegend=False, x=xx, y=pctf_norm, marker_color='red'))\n", - " fig.update_xaxes(title_text=\"Real space distance (Å)\",range=[-1, 2], type=\"log\", zeroline=False) # \n", - "\n", - " fig.update_layout(legend=dict(orientation=\"h\",yanchor=\"bottom\",y=0.8,xanchor=\"right\",x=0.95))\n", - " fig.update_layout(width=4.25*graph_size, height=2.2*graph_size, margin = dict(l=1.3*graph_size, r=0.3*graph_size, t=0.22*graph_size, b=0.7*graph_size))\n", - " fig.update_layout(title={'text': \"PCTF\",'y':0.99, 'x':0.33,'xanchor': 'left','yanchor': 'top'})\n", - " fig.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.9),plot_bgcolor='white')\n", - " fig.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " ### FINAL CHECKS ########################################## \n", - " align_check = dict(layout=Layout(width='235px') , style = {'description_width': '140px','button_width': \"95px\"}, disabled=True,) \n", - " check1 = Valid(value= bool(overlap > check4name), description='Beam overlap', **align_check)\n", - " check2 = Valid(value= bool(step_size_corr*10 > (wavelength * cl_det)/(num_pixels*size_pixel/1e6)/1e4), description='Superresolution', **align_check)\n", - " check3 = Valid(value= bool(beam_diameter/2 < probe_window/2), description='Recon. box coverage', **align_check) \n", - " check4 = Valid(value= bool(oversampling > 1), description='Overall sampling', **align_check) \n", - "\n", - " \n", - " checks = VBox([check1, check2, check3, check4]) # Label('Final checks')\n", - " checks.layout = Layout(margin='30px 0px 00px 240px', padding='5px 5px 5px 5px') # border='dashed 1px gray',\n", - "\n", - " \n", - "\n", - " \n", - " ### PROBE WINDOW ##########################################\n", - " if overlap_fig == 'Geometrical': \n", - " if beam_diameter < probe_window/2:\n", - " color = \"green\"\n", - " name = 'Beam ⌀ is fine'\n", - " elif beam_diameter < probe_window:\n", - " color = \"orange\"\n", - " name = 'Beam ⌀ is quite big'\n", + " fig1 = go.Figure() \n", + " fig1.add_trace(px.imshow(field).data[0])\n", + " fig1.add_shape(type=\"rect\",x0= field_cen-red_box*field_size, y0=field_cen-red_box*field_size, x1= field_cen+red_box*field_size, y1=field_cen+red_box*field_size,line=dict(color=box_col))\n", + " fig1.update_layout(title={'text': \"Uniformity: \"+str(np.round(uniformity,1))+\"%\",'y':0.85, 'x':0.3,'xanchor': 'left','yanchor': 'top'})\n", + " fig1.update_traces(dict(showscale=False, coloraxis=None, colorscale='plasma'), selector={'type':'heatmap'})\n", + " fig1.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\", title_text=\"Sample plane (nm)\", showgrid=False, showticklabels=True,\n", + " tickvals = [0, field.shape[0]/2, field.shape[0]-1], ticktext = [0, np.round((field.shape[0]/2)*sampling,1), np.round((field.shape[0]-1)*sampling,1)]).update_yaxes(showticklabels=False)\n", + " fig1.update_layout(width=3.1*graph_size, height=3.9*graph_size, margin =dict(l=0.5*graph_size, r=0.2*graph_size, t=0.9*graph_size, b=0.55*graph_size))\n", " else:\n", - " color = \"red\"\n", - " name = 'Beam ⌀ is too big'\n", + " fig1 = go.Figure() \n", + " fig1.update_layout(title={'text': \"abTEM not available\",'y': 0.98, 'x': 0.14,'xanchor': 'left','yanchor': 'top'})\n", + " fig1.update_layout(width=3.1*graph_size, height=3.9*graph_size, margin =dict(l=0.5*graph_size, r=0.2*graph_size, t=0.9*graph_size, b=0.55*graph_size))\n", "\n", - " fig7 = go.Figure() \n", - " fig7.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.3, fillcolor=\"#6F6F6F\", x0=probe_window/4, y0=probe_window/4, x1=3*probe_window/4, y1=3*probe_window/4,line_color=\"#6F6F6F\")\n", - " fig7.add_trace(go.Scatter(x=np.array(probe_window/2), y=np.array(probe_window/2), name=name, showlegend=True, marker_color=color, opacity = 0))\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/8, y0=probe_window/2-beam_diameter/8, x1=probe_window/2+beam_diameter/8, y1=probe_window/2+beam_diameter/8, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/6, y0=probe_window/2-beam_diameter/6, x1=probe_window/2+beam_diameter/6, y1=probe_window/2+beam_diameter/6, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/5, y0=probe_window/2-beam_diameter/5, x1=probe_window/2+beam_diameter/5, y1=probe_window/2+beam_diameter/5, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/4.25, y0=probe_window/2-beam_diameter/4.25, x1=probe_window/2+beam_diameter/4.25, y1=probe_window/2+beam_diameter/4.25, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/3.5, y0=probe_window/2-beam_diameter/3.5, x1=probe_window/2+beam_diameter/3.5, y1=probe_window/2+beam_diameter/3.5, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/3, y0=probe_window/2-beam_diameter/3, x1=probe_window/2+beam_diameter/3, y1=probe_window/2+beam_diameter/3, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.2, fillcolor=color, x0=probe_window/2-beam_diameter/2.5, y0=probe_window/2-beam_diameter/2.5, x1=probe_window/2+beam_diameter/2.5, y1=probe_window/2+beam_diameter/2.5, line_color=color,)\n", - " fig7.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=0.4, fillcolor=color, x0=probe_window/2-beam_diameter/2, y0=probe_window/2-beam_diameter/2, x1=probe_window/2+beam_diameter/2, y1=probe_window/2+beam_diameter/2, line_color=color,)\n", - " fig7.update_xaxes(title_text=\"Reconstruction box (nm)\", range=[0, probe_window], tickvals = [0, probe_window/4, probe_window/2, 3*probe_window/4, probe_window], ticktext = [0, np.round(probe_window/4,2),np.round(probe_window/2,2),np.round(3*probe_window/4,2),np.round(probe_window,2)])\n", - " fig7.update_yaxes(range=[0, probe_window], tickvals = [0, probe_window/4, probe_window/2, 3*probe_window/4, probe_window], showticklabels=False,)\n", - " fig7.update_yaxes(range=[0, probe_window], showticklabels=False,)\n", - " fig7.update_yaxes(range=[0, probe_window], showticklabels=False,)\n", - " fig7.update_layout(legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=1),title={'text': \"Probe\",'y':0.975, 'x':0.05,'xanchor': 'left','yanchor': 'top'})\n", - " fig7.update_layout(width=2.7*graph_size, height=3.1*graph_size, margin =dict(l=0, r=0, t=0.1*graph_size, b=0)) \n", - " fig7.update_layout(plot_bgcolor='white')\n", - " fig7.update_xaxes(mirror=True,ticks='outside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - " fig7.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", - "\n", - "\n", - " ####################\n", - " ####################\n", - " ####################\n", - " ####################\n", - " ####################\n", - " elif method == 'iterative': \n", - " sampling= 0.1 # sampling of the simulated potential in A\n", - " probe = Probe(sampling = sampling, extent = 2*probe_window*10, energy = beam*1e3, semiangle_cutoff = semi_angle_corr, defocus = defocus*10)\n", - " # probe = Probe(sampling=sampling, extent= A , energy=beam*1e3 eV, semiangle_cutoff = mrad, defocus= A)\n", - " intensity2 = probe.build().intensity().compute()\n", - " intensity2 = intensity2.array\n", - " inten = intensity2/np.max(intensity2)\n", + " ### DETECTOR PLANE\n", + " fig2 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", + " fig2.update_xaxes(title_text=\"Detector pixel array\", range=[0.5, num_pixels+0.5], tickvals = [1, num_pixels/2+0.5, num_pixels], ticktext = [1, num_pixels/2, num_pixels], showticklabels=True,showgrid=True) \n", + " fig2.update_yaxes(range=[0.5, num_pixels+0.5], showticklabels=False, showgrid=False, secondary_y=False)\n", + " fig2.add_shape(type=\"circle\",xref=\"x\", yref=\"y\",opacity=0.5, fillcolor=\"#FF7F7F\", x0=(num_pixels+1)/2-beam_diameter_pix/2, y0=(num_pixels+1)/2-beam_diameter_pix/2, x1=(num_pixels+1)/2+beam_diameter_pix/2, y1=(num_pixels+1)/2+beam_diameter_pix/2,line_color=\"red\",secondary_y=False)\n", + " fig2.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.5, fillcolor=\"#f0f921\", x0=0.5, y0=0.5, x1=1.5, y1=1.5,line_color=\"#000004\",secondary_y=False) \n", + " fig2.add_annotation(x=(num_pixels+1)/2-beam_diameter_pix/2, y=(num_pixels+1)/2, ax=(num_pixels+1)/2+beam_diameter_pix/2, ay=(num_pixels+1)/2, xref='x',yref='y',axref='x',ayref='y',text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='black')\n", + " fig2.add_annotation(x=(num_pixels+1)/2+beam_diameter_pix/2,y=(num_pixels+1)/2, ax=(num_pixels+1)/2-beam_diameter_pix/2, ay=(num_pixels+1)/2, xref='x',yref='y',axref='x',ayref='y', text='', showarrow=True,arrowhead=2,arrowsize=2,arrowwidth=1,arrowcolor='black')\n", + " fig2.add_annotation(x=(num_pixels+1)/2, y=(num_pixels+1)/2, text=str(np.round(beam_diameter_pix,1))+\" pix\", showarrow=False, yshift=10)\n", + " fig2.add_annotation(x=1, y=1, text=str(np.round(size_pixel,2))+\" μm ≈ \" +str(np.round(pixel_angle,4))+\" mrad\", showarrow=False, xshift=70+(50/np.sqrt(num_pixels)), yshift=10+(50/np.sqrt(num_pixels)))\n", + " fig2.update_yaxes(title_text=\"Cover angle (mrad)\", showticklabels=True, showgrid=True, range=[0.5, num_pixels+0.5], tickvals = [1, num_pixels/2+0.5, num_pixels], ticktext = [str(np.round(-detector_cover,1)), \"0\", str(np.round(detector_cover,1))])\n", + " fig2.update_layout(plot_bgcolor='white', legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"left\",x=0.1))\n", + " fig2.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig2.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig2.update_layout(title={'text': \"Detector\",'y':0.65, 'x': 0.44,'xanchor': 'left','yanchor': 'top'})\n", + " fig2.update_layout(width=3.45*graph_size, height=4.7*graph_size, margin =dict(l=0.65*graph_size, r=0.1*graph_size, t=1.9*graph_size, b=0)) \n", + " fig2.add_annotation(x=(num_pixels+1)/2, y=(num_pixels+1)/2, text=\"BF disk\", showarrow=False, yshift=-15, font=dict(family=\"calibri\", size=18, color=\"#FF7F7F\"))\n", + " \n", + " match method: \n", + " case 'ssb':\n", + " ### CAMERA LENGTH GRAPH\n", + " fig4 = make_subplots(specs=[[{\"secondary_y\": True}]])\n", + " fig4.add_trace(go.Scatter(showlegend=False,x=cl_all, y=detector_cover_all, marker_color='black'), secondary_y=False)\n", + " fig4.add_trace(go.Scatter(showlegend=False,x=cl_all, y=detector_cover_a_all,marker_color='black'), secondary_y=True)\n", + " fig4.add_trace(go.Scatter(x=np.array(ssb_cl), y=np.array(kolik),marker_size=12, marker_color='green', name = \"Maximal CL\"), secondary_y=True) \n", + " fig4.add_trace(go.Scatter(showlegend=False,x=[np.min(cl_all)/1.5,np.array(cl)], y=[detector_cover, detector_cover], mode='lines',marker_color='gray'), secondary_y=False)\n", + " fig4.add_trace(go.Scatter(showlegend=False,x=[np.array(cl),np.array(cl)], y=[0, np.array(covered_alfas)], mode='lines',marker_color='gray'), secondary_y=True)\n", + " fig4.add_trace(go.Scatter(showlegend=False,x=[np.array(cl),np.max(cl_all)*1.5], y=[np.array(covered_alfas), np.array(covered_alfas)], mode='lines',marker_color='gray'), secondary_y=True)\n", + " fig4.add_trace(go.Scatter(showlegend=False,x=np.array(cl), y=np.array(covered_alfas), marker_size=12, marker_color='red', name = str(np.round(detector_cover,1))+ \" mrad; \"+str(np.round(covered_alfas,2))+ \" α\"), secondary_y=True) \n", + " fig4.add_annotation(x=np.log10(np.max(cl_all)), y=detector_cover, text=str(np.round(covered_alfas,1)), showarrow=False, xshift=20, yshift=+10, secondary_y=False)\n", + " fig4.add_annotation(x=np.log10(np.min(cl_all)), y=detector_cover, text=str(np.round(detector_cover,1)), showarrow=False, xshift=-20, yshift=+10, secondary_y=False)\n", + " fig4.update_layout(xaxis=dict(tickmode = 'array', tickvals = [1, num_pixels/4, num_pixels/2, 3*num_pixels/4, num_pixels]))\n", + " fig4.update_xaxes(title_text=\"Nominal camera length (cm)\", type=\"log\", tickvals = cl_all, mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig4.update_xaxes(range=[np.log10(np.min(cl_all)/1.5), np.log10(np.max(cl_all)*1.5)]) \n", + " fig4.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig4.update_yaxes(title_text=\" Cover angle (mrad)\", range=[0, 1.1*np.max(detector_cover_all)], secondary_y=False)\n", + " fig4.update_yaxes(title_text=\" Cover angle (α)\", range=[0, 1.1*np.max(detector_cover_a_all)], showgrid=False, secondary_y=True)\n", + " fig4.update_layout(title={'text': \"Camera length\",'y':0.95, 'x':0.17,'xanchor': 'left','yanchor': 'top'}, legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.95), plot_bgcolor='white')\n", + " fig4.update_layout(width=3.61*graph_size, height=3.4*graph_size, margin =dict(l=0.3*graph_size, r=0.25*graph_size, t=0.3*graph_size, b=0.3*graph_size))\n", " \n", - " cen2 = inten.shape\n", - " sirkaA = cen2[0]*sampling\n", - " sirkaB = probe_window*10/sampling\n", - "\n", - " just_probe_window = inten[int(cen2[0]/2)-int(sirkaB/2) : int(cen2[0]/2)+int(sirkaB/2), int(cen2[0]/2)-int(sirkaB/2) : int(cen2[0]/2)+int(sirkaB/2)]\n", - " int_tot = np.sum(just_probe_window)/np.sum(inten)*100\n", - "\n", - " fig7 = go.Figure() \n", - " fig7.add_trace(px.imshow(inten).data[0],)\n", - " fig7.add_shape(type=\"rect\",x0= cen2[0]/2-sirkaB/2, y0=cen2[0]/2-sirkaB/2, x1= cen2[1]/2+sirkaB/2, y1=cen2[1]/2+sirkaB/2, line=dict(color=\"white\"),)\n", - " fig7.update_layout(title={'text': \"Probe cover \",'y':0.96, 'x':0.05,'xanchor': 'left','yanchor': 'top'})\n", - " fig7.update_layout(width=2.7*graph_size, height=2.65*graph_size, margin =dict(l=0.1*graph_size, r=0.1*graph_size, t=0.3*graph_size, b=0))\n", - " fig7.update_traces(dict(showscale=False, \n", - " coloraxis=None, \n", - " colorscale='plasma'), selector={'type':'heatmap'})\n", - " fig7.update_xaxes(showticklabels=False).update_yaxes(showticklabels=False)\n", - " fig7.add_annotation(x=cen2[0]/2, y=cen2[0]/2+sirkaB/2, text='Recon. box '+str(np.round(probe_window,2))+' nm', showarrow=False, yshift=15)\n", - " fig7.add_annotation(x=cen2[0]/2, y=cen2[0]/2-sirkaB/2, text='Probe covered '+str(np.round(int_tot,1))+' %', showarrow=False, yshift=-15)\n", - " fig7.update_annotations(font=dict(color=\"white\"))\n", - " # fig7.update_annotations(font=dict(family=\"sans serif\", size=18, color=\"red\"))\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - " \n", + " ### SSB-PCTF\n", + " omega, pctf = pty.get_ssb_ctf()\n", + " xx = wavelength/(np.sin(semi_angle_corr*omega/1000))/100 # pitch size\n", " \n", + " fig5 = go.Figure() \n", + " fig5.update_yaxes(title_text=\"Transfer (-)\")\n", + " match ctf_xaxis:\n", + " case 'α':\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=omega, y=pctf, marker_color='red', name='For all apertures')) \n", + " fig5.update_xaxes(title_text=\"Scattering angle (α)\", range=[0, 2], zeroline=False)\n", + " \n", + " case 'mrad':\n", + " for x in apertures:\n", + " if x == apertures[0]:\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=pty.get_angle_corr(x)*omega, y=pctf, marker_color='gray', name='Others'))\n", + " else:\n", + " fig5.add_trace(go.Scatter(showlegend=False, x=pty.get_angle_corr(x)*omega, y=pctf, marker_color='gray'))\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=semi_angle_corr*omega, y=pctf, marker_color='red', name='Selected aperture'))\n", + " fig5.update_xaxes(title_text=\"Scattering angle (mrad)\", range=[0, 2*semi_angle_corr], zeroline=False)\n", "\n", + " case 'Å':\n", + " for x in apertures:\n", + " d = wavelength/(np.sin(pty.get_angle_corr(x)*omega/1000))/100 # Full pitch size\n", + " if x == apertures[0]:\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=d, y=pctf, marker_color='gray', name='Others'))\n", + " else:\n", + " fig5.add_trace(go.Scatter(showlegend=False, x=d, y=pctf, marker_color='gray'))\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=xx, y=pctf, marker_color='red', name='Selected aperture'))\n", + " fig5.update_xaxes(title_text=\"Spacing (Å)\", range=[-0.5, 2], type=\"log\", zeroline=False)\n", " \n", - " ### CAMERA LENGTH TABLE ########################################## \n", - " dictionary = {}\n", - " tab = np.array([np.round(ptycho_pixel_size_all,2),np.round(detector_cover_all,1), np.round(detector_cover_a_all,1), np.round(max_defocus_all,1), opt.cameralengths(), np.round(oversampling_all,1)])\n", + " fig5.update_layout(plot_bgcolor='white', title={'text': \"Phase CTF\",'y':0.99, 'x':0.42,'xanchor': 'left','yanchor': 'top'},legend=dict(orientation=\"h\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.95)) \n", + " fig5.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig5.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig5.update_layout(width=3.5*graph_size, height=2.2*graph_size, margin = dict(l=0.3*graph_size, r=0.3*graph_size, t=0.5*graph_size, b=0.4*graph_size))\n", + " \n", + " case 'iterative':\n", + " ### ITR-PCTF\n", + " pctf_norm = pctf_itr/np.max(pctf_itr)\n", + " fig5 = go.Figure() \n", + " fig5.update_yaxes(title_text=\"Transfer (-)\")\n", + " match ctf_xaxis: \n", + " case 'α':\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=omega_itr, y= pctf_norm, marker_color='red', name='For all apertures'))\n", + " fig5.update_xaxes(title_text=\"Scattering angle (α)\", range=[0, 6], zeroline=False)\n", + " fig5.update_yaxes(range=[0, 1.1])\n", + " case 'mrad': \n", + " for x in apertures:\n", + " if x == apertures[0]:\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=pty.get_angle_corr(x)*omega_itr, y=pctf_norm, marker_color='gray', name='Others'))\n", + " else:\n", + " fig5.add_trace(go.Scatter(showlegend=False, x=pty.get_angle_corr(x)*omega_itr, y=pctf_norm, marker_color='gray'))\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=semi_angle_corr*omega_itr, y=pctf_norm, marker_color='red', name='Selected aperture'))\n", + " fig5.update_xaxes(title_text=\"Scattering angle (mrad)\", range=[0, 6*semi_angle_corr], zeroline=False)\n", + " case 'Å':\n", + " for x in apertures:\n", + " d = wavelength/(np.sin(pty.get_angle_corr(x)*omega_itr/1000))/100\n", + " if x == apertures[0]:\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=d, y=pctf_norm, marker_color='gray', name='Others'))\n", + " else:\n", + " fig5.add_trace(go.Scatter(showlegend=False, x=d, y=pctf_norm, marker_color='gray'))\n", + " xx = wavelength/(np.sin(semi_angle_corr*omega_itr/1000))/100\n", + " fig5.add_trace(go.Scatter(showlegend=True, x=xx, y=pctf_norm, marker_color='red', name='Selected aperture'))\n", + " fig5.update_xaxes(title_text=\"Spacing (Å)\",range=[-1, 2], type=\"log\", zeroline=False)\n", + " \n", + " fig5.update_layout(title={'text': \"Phase CTF\",'y':0.99, 'x':0.42,'xanchor': 'left','yanchor': 'top'},legend=dict(orientation=\"h\",yanchor=\"bottom\",y=1.01,xanchor=\"left\",x=0),plot_bgcolor='white') \n", + " fig5.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig5.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig5.update_layout(width=3.5*graph_size, height=2.2*graph_size, margin = dict(l=0.3*graph_size, r=0.3*graph_size, t=0.5*graph_size, b=0.4*graph_size))\n", "\n", - " align6 = dict(layout=Layout(width=str(int(graph_size/100*57))+'px') , style = {'description_width': '0px','button_width': str(int(graph_size/100*56))+'px'}, disabled=True,)\n", - " align7 = dict(layout=Layout(width='128px') , style = {'description_width': '0px','button_width': \"128px\"}, disabled=True,)\n", - " \n", - " for i in range(0,12):\n", - " button_style = 'success'\n", - " data = tab[:,int(i)] # 0. ptycho pix, 1.det cov 2.det cov a, 3.max def, 4.cl, 5.oversampling\n", - " data_tuple = tuple(tab[0:5,int(i)]) + (\"\",tab[5,int(i)])\n", - " icons=['','','','','']\n", + " ### PROBE WINDOW\n", + " match overlap_fig:\n", + " case 'Geometrical': \n", + " if beam_diameter < probe_window/2:\n", + " color = \"green\"\n", + " elif beam_diameter < probe_window:\n", + " color = \"orange\"\n", + " else:\n", + " color = \"red\"\n", "\n", - "# check1name = 'Low anlge approximation'\n", - "# check2name = 'Ptycho pixel < step size'\n", - "# check3name = 'Beam fits in probe window'\n", - "# check4name = 'Detector cover < 1α'\n", - "# check5name = 'Detector cover > 6α'\n", - "# check6name = 'Oversampling > 1'\n", + " opacity =[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.4]\n", + " xcoef = [8, 6, 5, 4.25, 3.5, 3, 2.5, 2]\n", "\n", - " if data[1] > 1000*np.radians(check1name):\n", - " button_style = 'danger' \n", - " \n", - " if check2name == True: \n", - " if data[0] > step_size_corr*10:\n", - " button_style = 'danger'\n", - " \n", - " if check3name == True: \n", - " if data[3] < defocus:\n", - " button_style = 'danger'\n", - " \n", - " if data[2] < check0name[0]:\n", - " button_style = 'danger' \n", + " fig3 = go.Figure() \n", + " fig3.add_shape(type=\"rect\",xref=\"x\", yref=\"y\",opacity=0.3, fillcolor=\"#6F6F6F\", x0=probe_window/4, y0=probe_window/4, x1=3*probe_window/4, y1=3*probe_window/4,line_color=\"#6F6F6F\")\n", + " fig3.add_trace(go.Scatter(x=np.array(probe_window/2), y=np.array(probe_window/2), name='Maximal recomm. Δf '+str(np.round(max_defocus,1))+' nm', showlegend=True, marker_color=color, opacity = 0))\n", "\n", - " if data[2] > check0name[1]:\n", - " button_style = 'warning' \n", - "\n", - " if check6name == True: \n", - " if data[5] < 1:\n", - " button_style = 'danger' \n", + " for i in range(0, len(opacity)):\n", + " fig3.add_shape(type=\"circle\",xref=\"x\", yref=\"y\", opacity=opacity[i], fillcolor=color, x0=probe_window/2-beam_diameter/xcoef[i], y0=probe_window/2-beam_diameter/xcoef[i], \n", + " x1=probe_window/2+beam_diameter/xcoef[i], y1=probe_window/2+beam_diameter/xcoef[i], line_color=color)\n", " \n", - " if cl == data[4]:\n", - " icons=['','','','','','check'] \n", - " \n", - " dictionary[i] = ToggleButtons(options=data_tuple, text_color= 'red', button_style=button_style, icons = icons, **align6)\n", + " fig3.update_xaxes(title_text=\"Reconstruction box (nm)\", range=[0, probe_window], tickvals = [0, probe_window/4, probe_window/2, 3*probe_window/4, probe_window], ticktext = [0, np.round(probe_window/4,2),np.round(probe_window/2,2),np.round(3*probe_window/4,2),np.round(probe_window,2)])\n", + " fig3.update_yaxes(range=[0, probe_window], tickvals = [0, probe_window/4, probe_window/2, 3*probe_window/4, probe_window], showticklabels=False)\n", + " fig3.update_layout(plot_bgcolor='white',legend=dict(orientation=\"v\",yanchor=\"bottom\",y=1.01,xanchor=\"right\",x=0.8),title={'text':\"Probe\",'y':0.92,'x':0.4,'xanchor':'left','yanchor':'top'})\n", + " fig3.update_xaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig3.update_yaxes(mirror=True,ticks='inside',showline=True,linecolor='black',gridcolor='lightgrey',title_font_color=\"#000000\")\n", + " fig3.update_layout(width=2.7*graph_size, height=4.0*graph_size, margin =dict(l=0, r=0, t=0.8*graph_size, b=0.75*graph_size)) \n", "\n", - " legend = ToggleButtons(options=['Ptycho pixel (Å)','Det. cover (mrad)','Det. cover (α)', 'Max. def. (nm)','Nominal CL (cm)','Selected by CL ','Oversampling'], \n", - " tooltips=['Dependent on: detector, beam energy, camera length', 'Dependent on: detector, camera length', 'Dependent on: detector, camera length, probe semi-angle', \n", - " 'Dependent on: detector, binning, beam energy, camera length, zero defocus beam diameter, probe semi-angle', 'Just nominal camera length'],button_style='', **align7) \n", - " \n", - " cltab = HBox([legend,dictionary[0],dictionary[1],dictionary[2],dictionary[3],dictionary[4],dictionary[5],dictionary[6],dictionary[7],dictionary[8],dictionary[9], dictionary[10],dictionary[11]])\n", - " cltab = VBox([Label('Recommended parameters for proper ptychographic reconstruction.'), cltab])\n", - " cltab.layout = Layout(border='solid 0px gray',margin='10px 0px 10px 125px', padding='5px 5px 5px 5px')\n", + " case 'Ilumination': \n", + " if abtem == True:\n", + " sampling= 0.1 # sampling of the simulated potential in A\n", + " probe = Probe(sampling = sampling, extent = 2*probe_window*10, energy = beam_energy*1e3, semiangle_cutoff = semi_angle_corr, defocus = defocus*10)\n", + " # probe = Probe(sampling=sampling, extent= A , energy=beam*1e3 eV, semiangle_cutoff = mrad, defocus= A)\n", + " intensity2 = probe.build().intensity().compute().array\n", + " intensity3 = intensity2/np.max(intensity2)\n", + " cen2 = intensity3.shape\n", + " sirkaA = cen2[0]*sampling\n", + " sirkaB = np.round(probe_window,2)*10/sampling\n", + " just_probe_window = intensity3[int(cen2[0]/2)-int(sirkaB/2):int(cen2[0]/2)+int(sirkaB/2), int(cen2[0]/2)-int(sirkaB/2):int(cen2[0]/2)+int(sirkaB/2)]\n", + " int_tot = np.sum(just_probe_window)/np.sum(intensity3)*100\n", + " cross_section = intensity2[int(cen2[0]/2),:]\n", + " cross_section = (cross_section-np.min(cross_section))/np.max(cross_section)\n", "\n", + " fig3 = go.Figure() \n", + " fig3.add_trace(px.imshow(intensity3).data[0])\n", + " fig3.add_trace(go.Scatter(x=np.linspace(0,int(cen2[0])-1,len(cross_section)), y=int(cen2[0]/4)+cross_section*int(cen2[0]/2), showlegend=False, marker_color=\"white\", opacity = 0.7))\n", + " fig3.add_shape(type=\"rect\",x0= cen2[0]/2-sirkaB/2, y0=cen2[0]/2-sirkaB/2, x1= cen2[1]/2+sirkaB/2, y1=cen2[1]/2+sirkaB/2, line=dict(color=\"red\"))\n", + " fig3.update_layout(title={'text': \"Probe cover \",'y':0.85, 'x':0.3,'xanchor': 'left','yanchor': 'top'})\n", + " fig3.update_traces(dict(showscale=False, coloraxis=None, colorscale='plasma'), selector={'type':'heatmap'})\n", + " fig3.update_xaxes(showticklabels=False).update_yaxes(showticklabels=False)\n", + " fig3.add_annotation(x=cen2[0]/2, y=cen2[0]/2+sirkaB/2, text='Recon. box '+str(np.round(probe_window,2))+' nm', showarrow=False, yshift=15)\n", + " fig3.add_annotation(x=cen2[0]/2, y=cen2[0]/2-sirkaB/2, text='Probe covered '+str(np.round(int_tot,1))+' %', showarrow=False, yshift=-15)\n", + " fig3.update_annotations(font=dict(color=\"white\"))\n", + " fig3.update_layout(width=2.7*graph_size, height=3.9*graph_size, margin =dict(l=0.1*graph_size, r=0.1*graph_size, t=0.9*graph_size, b=0.55*graph_size))\n", + " else:\n", + " fig3 = go.Figure() \n", + " fig3.update_layout(title={'text': \"abTEM not available\",'y': 0.98, 'x': 0.14,'xanchor': 'left','yanchor': 'top'})\n", + " fig3.update_layout(width=2.7*graph_size, height=3.9*graph_size, margin =dict(l=0.1*graph_size, r=0.1*graph_size, t=0.9*graph_size, b=0.55*graph_size))\n", + " \n", + " ### FINAL CHECKS \n", + " check1 = widg.Valid(value= bool(overlap > check4name), description='Beam overlap',layout=widg.Layout(width='250px'), style = {'description_width': '100px'}, disabled=True)\n", + " check2 = widg.Valid(value= bool(step_size_corr*10 > (wavelength*cl_det)/(num_pixels*size_pixel/1e6)/1e4), description='Resolution gain', layout=widg.Layout(width='250px'), style = {'description_width': '100px'}, disabled=True)\n", + " check3 = widg.Valid(value= bool(beam_diameter/2 < probe_window/2), description='Box coverage', layout=widg.Layout(width='250px'), style = {'description_width': '100px'}, disabled=True) \n", + " check4 = widg.Valid(value= bool(oversampling > 1), description='Overall sampling', layout=widg.Layout(width='250px'), style = {'description_width': '100px'}, disabled=True) \n", + " checks = widg.VBox([widg.HBox([check1, check2]), widg.HBox([check3, check4])]) # Label('Final checks')\n", + " checks.layout = widg.Layout(margin='0px 0px 0px 100px', padding='0px 0px 0px 0px', border='solid 3px gray') # border='dashed 1px gray'\n", "\n", + " ### CAMERA LENGTH TABLE\n", + " dictionary = {}\n", + " tab = np.array([cl_all, np.round(ptycho_pixel_size_all,2), np.round(detector_cover_all,1), np.round(detector_cover_a_all,1), np.round(probe_window_all,1), np.round(oversampling_all,1)])\n", + " \n", + " for i in range(0,len(cl_eff_all)):\n", + " button_style = 'success'\n", + " icons=['','','','','','']\n", + " data = tab[:,int(i)] # 0.cl, 1. ptycho pix, 2.det cov 3.det cov a, 4.max def, 5.probe window, 6.oversampling\n", + " \n", + " if cl == data[0]:\n", + " icons=['hand-point-left','','','','',''] \n", + " if check2name == True and data[1] > step_size_corr*10: # check2name = 'Ptycho pixel < step size'\n", + " icons=['','bell','','','',''] \n", + " button_style = 'warning'\n", + " if data[2] > 1000*np.radians(check1name): # check1name = 'Low anlge approximation'\n", + " icons=['','','bell','','',''] \n", + " button_style = 'warning' \n", + " if data[3] < check0name[0] or data[3] > check0name[1]: # 'Detector cover'\n", + " icons=['','','','bell','',''] \n", + " button_style = 'warning'\n", + " if check3name == True and beam_diameter > data[4]/2 and beam_diameter < data[4]:\n", + " icons=['','','','','','bell'] \n", + " button_style = 'warning'\n", + " if check3name == True and beam_diameter > data[4]:\n", + " icons=['','','','','','ban'] \n", + " button_style = 'danger'\n", + " if check6name == True and data[5] < 1: # check6name = 'Sampling > 1' \n", + " icons=['','','','','ban',''] \n", + " button_style = 'danger' \n", + " dictionary[i] = widg.ToggleButtons(options=tuple(data), text_color= 'red', button_style=button_style, icons = icons, layout=widg.Layout(width=str(int(graph_size/100*65))+'px'),\n", + " style = {'description_width': '0px','button_width': str(int(graph_size/100*63))+'px'}, disabled=True)\n", + " legend = widg.ToggleButtons(options=['Nominal CL (cm)','Recon. pixel size (Å)','Detector cover (mrad)','Detector cover (α)', 'Probe box (nm)', 'Overall sampling'],\n", + " button_style='', layout=widg.Layout(width='150px'), style = {'description_width': '0px','button_width': \"150px\"}, disabled=True) \n", + " \n", + " # FIX here\n", + " match len(cl_eff_all):\n", + " case 1: \n", + " cltab = widg.HBox([legend, dictionary[0]])\n", + " case 2: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1]])\n", + " case 3: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2]])\n", + " case 4: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3]])\n", + " case 5: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4]])\n", + " case 6: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5]])\n", + " case 7: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5], dictionary[6]])\n", + " case 8: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5], dictionary[6], dictionary[7]])\n", + " case 9: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5], dictionary[6], dictionary[7], dictionary[8]])\n", + " case 10: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5], dictionary[6], dictionary[7], dictionary[8], dictionary[9]])\n", + " case 11: \n", + " cltab = widg.HBox([legend, dictionary[0], dictionary[1], dictionary[2], dictionary[3], dictionary[4], dictionary[5], dictionary[6], dictionary[7], dictionary[8], dictionary[9], dictionary[10]])\n", "\n", - " ### SHOWING ###\n", - " if method == 'direct': \n", - " match chart:\n", - " case 'micr':\n", - " total = HBox([go.FigureWidget(fig8)]) \n", - " case 'dedic':\n", - " total = VBox([ HBox([go.FigureWidget(fig) ,go.FigureWidget(fig5)]), HBox([go.FigureWidget(fig4),go.FigureWidget(fig6)])])\n", - " case _: \n", - " right_column = VBox([HBox([go.FigureWidget(fig) ,go.FigureWidget(fig5)]), HBox([go.FigureWidget(fig4),go.FigureWidget(fig6)])]) \n", - " left_column = go.FigureWidget(fig8)\n", - " total = HBox([left_column, right_column])\n", - " \n", - " total.layout = Layout(border='solid 0px gray',margin='0px 0px 0px 20px', padding='0px 0px 0px 0px') \n", - " display(total)\n", + " cltab = widg.VBox([widg.Label('CAMERA LENGTH GUIDE'), cltab])\n", + " cltab.layout = widg.Layout(border='solid 0px gray',margin='10px 0px 10px 25px', padding='5px 5px 5px 5px')\n", "\n", - " elif method == 'iterative': \n", - " match chart:\n", - " case 'micr':\n", - " total = HBox([go.FigureWidget(fig8)])\n", - " case 'dedic':\n", - " sample_overlap = HBox([go.FigureWidget(fig5), go.FigureWidget(fig7), go.FigureWidget(fig6)]) \n", - " total = VBox([HBox([go.FigureWidget(fig), checks]), sample_overlap, cltab]) \n", - " \n", - " case _:\n", - " sample_overlap = HBox([go.FigureWidget(fig5), go.FigureWidget(fig7), go.FigureWidget(fig6)]) \n", - " right_column = VBox([HBox([go.FigureWidget(fig), checks]) , sample_overlap, cltab]) \n", - " left_column = VBox([go.FigureWidget(fig8)]) \n", - " total = HBox([left_column, right_column]) \n", - " \n", - " total.layout = Layout(border='solid 0px gray',margin='0px 0px 0px 10px', padding='0px 0px 0px 10px') \n", - " display(total)\n", + " ### SHOWING\n", + " match method: \n", + " case 'ssb':\n", + " right = widg.VBox([go.FigureWidget(fig1),go.FigureWidget(fig4)])\n", + " case 'iterative':\n", + " right = widg.VBox([widg.HBox([go.FigureWidget(fig1),go.FigureWidget(fig3)]), cltab, checks])\n", "\n", + " left = widg.VBox([go.FigureWidget(fig5),go.FigureWidget(fig2)])\n", + " total = widg.HBox([left, go.FigureWidget(fig), right])\n", + " total.layout = widg.Layout(border='solid 0px gray',margin='10px 10px 10px 10px', padding='0px 0px 0px 0px') \n", + " display(total)\n", " return \n", " \n", - "gui = interactive_output(ptycho_interact, {\"beam\": beam, \"aperture\": aperture,\"aperture_res\": aperture_res,\"aperture_res2\": aperture_res2, \"probe\": probe, \"cl\": cl, \"matrix\": matrix, \"defocus\": defocus, \"mag\": mag, \"camera\": camera,\n", - " \"binning\": binning, \"dwell_time\": dwell_time, \"restriction\": restriction, \"method\": method, \"ctf_xaxis\": ctf_xaxis, \"element\": element, \"graph_size\": graph_size,\"chart\": chart, \"beam_pos\": beam_pos, \n", - " \"fov_show\": fov_show, \"overlap_fig\":overlap_fig, \"red_box\": red_box, \"box_col\":box_col, \"check0name\":check0name, \"check1name\": check1name, \"check2name\": check2name, \"check3name\": check3name, \"check4name\": check4name, \"check6name\": check6name}) \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "68780f2b-efa0-4240-870b-2b0876977e90", - "metadata": {}, - "outputs": [], - "source": [ - "### Function definitions ###################################################\n", - "calib = r'calibrations.xlsx' # Path to the calibration file\n", - "class interaction: \n", - " \"\"\"Loads calibration settings and ranges from .xlsx file.\n", - " These are than used for widgets creation.\"\"\"\n", - " \n", - " def __init__(self):\n", - " self.calib = calib\n", + "gui = widg.interactive_output(ptycho_interact, {\"beam_energy\" : beam_energy, \"aperture\": aperture, \"aperture_res\": aperture_res, \"aperture_res2\": aperture_res2, \"probe_size\": probe_size, \"cl\": cl, \"matrix\": matrix,\n", + " \"defocus\": defocus, \"mag\": mag, \"camera\": camera, \"binning\": binning, \"dwell_time\" : dwell_time, \"restr\": restr, \"method\": method, \"ctf_xaxis\": ctf_xaxis, \"element\": element,\n", + " \"graph_size\": graph_size, \"beam_pos\": beam_pos, \"fov_show\": fov_show, \"overlap_fig\" :overlap_fig, \"red_box\": red_box, \"box_col\":box_col, \"check0name\":check0name, \n", + " \"check1name\": check1name, \"check2name\": check2name, \"check3name\": check3name, \"check4name\": check4name, \"check6name\": check6name}) \n", "\n", - " def elements(self):\n", - " excel_data = read_excel(calib,sheet_name='CTF')\n", - " elements = [str(e) for e in list(excel_data.CTF)]\n", - " elements = [x for x in elements if x != 'nan']\n", - " return elements\n", - "\n", - " def apertures(self):\n", - " excel_data = read_excel(self.calib,sheet_name='Probes')\n", - " excel_lin = list((excel_data[excel_data.Probe.isin([\"Probe\"])]))\n", - " apertures = excel_lin[1::]\n", - " return apertures\n", - " \n", - " def detectors(self):\n", - " excel_data = read_excel(self.calib,sheet_name='Detector')\n", - " excel_lin = list((excel_data[excel_data.Type.isin([\"Type\"])]))\n", - " detectors = excel_lin[1::]\n", - " return detectors\n", - " \n", - " def probes(self):\n", - " probes = list(read_excel(self.calib,sheet_name='Probes').Probe)\n", - " probes = probes[3::]\n", - " return probes\n", - " \n", - " def magnifications(self):\n", - " excel_data = read_excel(self.calib,sheet_name='Ranges')\n", - " magnifications = list(excel_data.Magnification)\n", - " return magnifications\n", - " \n", - " def energies(self): \n", - " excel_data = read_excel(self.calib,sheet_name='Ranges')\n", - " energies = [str(e) for e in list(excel_data.BeamEnergy)]\n", - " energies = [x for x in energies if x != 'nan']\n", - " energies = [int(float(e)) for e in energies]\n", - " return energies\n", - " \n", - " def mappings(self): \n", - " excel_data = read_excel(self.calib,sheet_name='Ranges')\n", - " mappings = [str(e) for e in list(excel_data.Mapping)]\n", - " mappings = [x for x in mappings if x != 'nan']\n", - " mappings = [int(float(e)) for e in mappings]\n", - " return mappings\n", - " \n", - " def cameralengths(self): \n", - " cameralengths = list(read_excel(self.calib,sheet_name='Pixel').NominalCL)\n", - " return cameralengths\n", - " \n", - " def cameralengths_eff(self): \n", - " cameralengths_eff = list(read_excel(self.calib,sheet_name='Pixel').DetectorCL)\n", - " return cameralengths_eff\n", - "\n", - " def dwelltimes(self): \n", - " excel_data = read_excel(self.calib,sheet_name='Ranges')\n", - " dwelltimes = [str(e) for e in list(excel_data.DwellTime)]\n", - " dwelltimes = [x for x in dwelltimes if x != 'nan']\n", - " dwelltimes = [int(float(e)) for e in dwelltimes] \n", - " return dwelltimes \n", - " \n", - "opt = interaction()\n", - "\n", - "\n", - "class ptychoScopy:\n", - " \"\"\"Computes various characteristics describing used setting.\"\"\"\n", - " \n", - " def __init__(self):\n", - " self.calib = calib\n", - "\n", - " def get_omegas(self):\n", - " excel_data = read_excel(calib,sheet_name='CTF')\n", - " excel_lin = list((excel_data[excel_data.CTF.isin([\"CTF\"])]))\n", - " self.omegas = excel_lin[1::]\n", - " return self.omegas\n", - "\n", - " def get_ctf(self, element):\n", - " excel_data = read_excel(calib, sheet_name='CTF', header = 0)\n", - " excel_line = np.array(excel_data[excel_data.CTF.isin([element])])\n", - " ctf = excel_line[0]\n", - " self.ctf = ctf[1::]\n", - " return self.ctf\n", - " \n", - " \n", - " def get_wavelength(self, beam):\n", - " self.wavelength = cons.h/np.sqrt(2*cons.electron_mass*cons.elementary_charge*beam*1e3*(1+((cons.elementary_charge*beam*1e3)/(2*cons.electron_mass*cons.speed_of_light**2))))\n", - " return self.wavelength\n", - " \n", - " def get_fov(self, mag):\n", - " FoVat1x = [str(e) for e in list(read_excel(calib,sheet_name='Ranges').FoVat1x)]\n", - " FoVat1x = np.array([x for x in FoVat1x if x != 'nan']).astype(float)\n", - " FoVat1x = FoVat1x.item()\n", - " self.fov = FoVat1x/(mag*1e6)\n", - " return self.fov\n", - " \n", - " def get_angle(self, aperture):\n", - " excel_data = read_excel(calib, sheet_name='Probes',header=0)\n", - " excel_line = excel_data[excel_data.Probe.isin(['SemiAngle'])]\n", - " angle = excel_line[aperture]\n", - " self.angle = np.array(angle).item()\n", - " return self.angle\n", - " \n", - " def get_angle_corr(self, aperture):\n", - " excel_data = read_excel(calib, sheet_name='Probes',header=0)\n", - " excel_line = excel_data[excel_data.Probe.isin(['SemiAngleCorr'])]\n", - " angle_corr = excel_line[aperture]\n", - " self.angle_corr = np.array(angle_corr).item()\n", - " return self.angle_corr\n", - " \n", - " def get_current(self, probe,aperture):\n", - " excel_data = read_excel(calib, sheet_name='Probes',header=0)\n", - " excel_line = excel_data[excel_data.Probe.isin([probe])]\n", - " current = excel_line[aperture]\n", - " self.current = np.array(current).item()\n", - " return self.current\n", - " \n", - " def get_currents_over_probes(self, probe):\n", - " excel_data = read_excel(calib, sheet_name='Probes',header=0)\n", - " currents_probes = np.array(excel_data[excel_data.Probe.isin([probe])])\n", - " currents_probes = currents_probes[0]\n", - " currents_probes = currents_probes[1::]\n", - " return currents_probes\n", - "\n", - " def get_currents_over_apertures(self, aperture):\n", - " excel_data = read_excel(calib, sheet_name='Probes',header=0)\n", - " currents_apertures = np.array(list(excel_data[aperture]))\n", - " return currents_apertures\n", - "\n", - " def get_pixel_angle(self, cl, camera, binning):\n", - " excel_data = read_excel(calib,sheet_name='Pixel',header=0)\n", - " excel_line = excel_data[excel_data.NominalCL.isin([cl])]\n", - " pixel_angle = excel_line[camera]\n", - " pixel_angle = np.array(pixel_angle).item()\n", - " self.pixel_angle = pixel_angle*binning\n", - " return self.pixel_angle\n", - " \n", - " def get_cl_detector(self,cl):\n", - " excel_data = read_excel(calib,sheet_name='Pixel')\n", - " excel_line = excel_data[excel_data.NominalCL.isin([cl])]\n", - " self.cl_detector = excel_line['DetectorCL']\n", - " self.cl_detector = self.cl_detector.item()\n", - " return self.cl_detector\n", - " \n", - " def get_aq_frec(self, dwell_time):\n", - " self.aq_frec = 1000/dwell_time\n", - " return self.aq_frec \n", - " \n", - " def get_step_size(self, matrix):\n", - " self.step_size = self.fov/(matrix-1)\n", - " return self.step_size \n", - " \n", - " def get_step_correction(self): \n", - " step_correction = [str(e) for e in list(read_excel(calib,sheet_name='Ranges').StepSizeCorr)]\n", - " step_correction = np.array([x for x in step_correction if x != 'nan']).astype(float)\n", - " self.step_correction = step_correction.item()\n", - " return self.step_correction\n", - " \n", - " def get_beam_diameter(self, aperture, defocus):\n", - " excel_data = read_excel(calib, sheet_name='Probes')\n", - " excel_line = excel_data[excel_data.Probe.isin(['Def0Diameter'])]\n", - " beam_0_diameter = np.array([excel_line[aperture]]).astype(float)\n", - " beam_0_diameter = beam_0_diameter.item()\n", - " self.beam_diameter = 2*defocus*np.tan(self.angle_corr/1000)+beam_0_diameter\n", - " return self.beam_diameter\n", - " \n", - " def get_0beam_diameter(self, aperture):\n", - " excel_data = read_excel(calib, sheet_name='Probes')\n", - " excel_line = excel_data[excel_data.Probe.isin(['Def0Diameter'])]\n", - " beam_0_diameter = np.array([excel_line[aperture]]).astype(float)\n", - " self.beam_0_diameter = beam_0_diameter.item()\n", - " return self.beam_0_diameter\n", - " \n", - " def get_detector(self, camera, binning):\n", - " excel_data = read_excel(calib, sheet_name='Detector')\n", - " excel_line = excel_data[excel_data.Type.isin(['Array'])]\n", - " num_pixels = np.array([excel_line[camera]]).astype(float)\n", - " num_pixels = num_pixels.item()\n", - " self.num_pixels = num_pixels/binning\n", - " excel_line = excel_data[excel_data.Type.isin(['RealSize'])]\n", - " size_pixel = excel_line[camera]\n", - " size_pixel = size_pixel.item()\n", - " self.size_pixel = size_pixel*binning\n", - " return self.num_pixels, self.size_pixel \n", - " \n", - " def get_det_resolution(self, camera):\n", - " excel_data = read_excel(calib, sheet_name='Detector')\n", - " excel_line = excel_data[excel_data.Type.isin(['Array'])]\n", - " num_pixels = np.array([excel_line[camera]]).astype(float)\n", - " self.num_pixels = num_pixels.item()\n", - " return self.num_pixels\n", - " \n", - " def get_det_orig_pixel_size(self, camera):\n", - " excel_data = read_excel(calib, sheet_name='Detector')\n", - " excel_line = excel_data[excel_data.Type.isin(['RealSize'])]\n", - " orig_size_pixel = excel_line[camera]\n", - " self.orig_size_pixel = orig_size_pixel.item()\n", - " return self.orig_size_pixel\n", - " \n", - " def get_pixel_covers(self,camera, binning): \n", - " excel_data = read_excel(calib, sheet_name='Pixel')\n", - " pixel_covers = list(excel_data[camera])\n", - " pixel_covers = [str(e) for e in pixel_covers]\n", - " pixel_covers = [x for x in pixel_covers if x != 'nan']\n", - " pixel_covers = [float(e) for e in pixel_covers] \n", - " pixel_covers = np.array(pixel_covers)\n", - " self.pixel_covers = pixel_covers * binning\n", - " return self.pixel_covers\n", - "\n", - " def get_pumping_apertures(self): \n", - " excel_data = read_excel(calib,sheet_name='Pixel')\n", - " pump_apert = [str(e) for e in list(excel_data.PAAR)]\n", - " pump_apert = [x for x in pump_apert if x != 'nan']\n", - " self.pump_apert = [float(e) for e in pump_apert]\n", - " return self.pump_apert \n", - " \n", - " def get_ssb_ctf(self):\n", - " ### Contrast transfer function ###\n", - " omega = np.linspace(1e-6,2,100)\n", - " p3 = np.arccos(np.minimum(1,omega))\n", - " p3[np.isnan(p3)] = 0\n", - " p5 = 1-(omega**2)\n", - " p5[p5 <0] = 0\n", - " p4 = omega*np.sqrt(p5)\n", - " p4[np.isnan(p4)] = 0\n", - " pctf = (2/cons.pi)*(np.arccos(omega/2)-p3+p4-(omega/2*np.sqrt(1-(omega/2)**2)))\n", - " return pctf\n", - " \n", - " def cl4ssb(self, detector_cover_a_all):\n", - " ssb_cl = deepcopy(detector_cover_a_all)\n", - " ssb_cl[ssb_cl<1] = \"nan\"\n", - " ssb_cl = np.nanmin(ssb_cl)\n", - " kde = np.array(np.where(ssb_cl == detector_cover_a_all)).item()\n", - " kolik = np.array(detector_cover_a_all[kde]) \n", - " cl_all = opt.cameralengths()\n", - " ssb_cl = np.array(cl_all[kde]) # Recommended cl\n", - " return ssb_cl, kolik\n", - " \n", - "pty = ptychoScopy() \n", - " \n", - "class interaction:\n", - " \"\"\"Live interaction with computing of various parameters.\"\"\"\n", - " \n", - " def __init__(self):\n", - " self.calib = calib\n", - " \n", - " def show_wavelength(self,caller):\n", - " beam_res.value = f'λ (pm) {str(\"{:.1f}\".format(pty.get_wavelength(caller.new)*1e12))}'\n", - " return beam_res.value\n", - " \n", - " def show_probe_angle(self,caller):\n", - " aperture_res.value = f'Semi-angle (mrad) {\"{:.1f}\".format(pty.get_angle(caller.new))}' \n", - " return aperture_res.value\n", - " \n", - " def show_corrprobe_angle(self,caller):\n", - " aperture_res2.value = f'corr. {\"{:.2f}\".format(pty.get_angle_corr(caller.new))}'\n", - " return aperture_res2.value\n", - " \n", - " def show_fov(self,caller):\n", - " fov_res.value = f'FoV (nm) {\"{:.1f}\".format(pty.get_fov(caller.new))}'\n", - " return fov_res.value\n", - " \n", - " def show_frame_rate(self,caller):\n", - " dwell_time_res.value = f'Rate (kHz) {\"{:.1f}\".format(pty.get_aq_frec(caller.new))}' \n", - " return dwell_time_res.value\n", - " \n", - " def show_cd_det(self,caller):\n", - " cl_det_res.value = f'Detector CL (cm) {\"{:.1f}\".format(pty.get_cl_detector(caller.new))}' \n", - " return cl_det_res.value\n", - "\n", - "inte = interaction() " + "ptychoscopy = widg.VBox([top_set, widg.HBox([controls, widg.VBox([graph_controls, gui])])])\n" ] } ], diff --git a/ptychoscopy/__init__.py b/ptychoscopy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ptychoscopy/__pycache__/__init__.cpython-311.pyc b/ptychoscopy/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f0f5cc4b3238860fe34ce9a60e2e335f7f82676 GIT binary patch literal 178 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 a6!x=x#CDUtCjINLj9(p3Tj-B<;{OM|PY{>@ literal 0 HcmV?d00001 diff --git a/ptychoscopy/__pycache__/gui.cpython-311.pyc b/ptychoscopy/__pycache__/gui.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3418d7c974439973bea72355b69fa5514957bf5 GIT binary patch literal 60318 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 qE-%8WnozlOr+3wM%yqSx2ij-$4 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 V%`29MpXfRhbk-9ZrGOF6{{_B2je-CG literal 0 HcmV?d00001 diff --git a/ptychoscopy/__pycache__/source.cpython-311.pyc b/ptychoscopy/__pycache__/source.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d8e7860c1380aa9e490f5e5db89be9021721474 GIT binary patch literal 25728 zcmeHw3vg6dnqI%vYCRe~S}nCC)PMj9jKF|E$RH5HfNhW&^RN-%cGKOG8oJfu-WHFx zWSEV2BTpa;Q=%;I;!Uq(d*sKIwN9KNyW?GUliBrFO-=f$?v#{Up=zo&yA^M;2@_^3 zsYxZ3??3m^_jb30z{a(+HJ78m&pqedbI&>dXU!XeP(uV>9gY360^naeRebDS!0fPQC|^@n`6$tVx-w( zu6RjbiIP?tFY7B;;_mp8z6vE?8L#TAW^sGW6R+v3VR1*y8?WuFW$~g|UEJ5_i`Vzn zBT~Rp7566O( zQ5FxLjRg3S)5Ebul5e$04&-o=VX0{M;o(?xD3WR%PF@NPCU~l8eJB`~2 zHF{55NbMPQk5FyJ-~FWkZ<>;T>NRQ#s8JB)VbcfZ-VcBg);>gRd?eP-Q(gXF_Vjd~ zJjzEn{v>}kF*1B9z@1#T?$Gfg`=9SUxi6YL5IlWSH}HlypBUjnk+$JWk~0v94n>oJ zK&o0dENyCPJ>GP`4B(3CuE#fSyXqRpzx&igLyw5vSdV@S5%fsc+oVR=CNSa079;tN znF*swJJl#(qvkVI6T99=Js)Xx?J*h2e9S_0Flxz9AGH9}_Fl=_b7U_@&BYH!BFVr| zFdi|qn%-K4zxz)BylEORjhaqXjG6VVA2l1>aKm!75?BFVBrBifKCnoZwhfXw!c#B( zey$QfzjSSnMfqeX5g+bKwdjX65{twmLrK1Edn^Hz@?D6iCH;7kCxW1d3x1C#tw8b}?O5bk;phjSS$hwQ)4woEt#0QMWlS zqODf0f>K;ev;@MzWKeRdklBrsbdd@!sKxEqVo_*Sr@oW`5TSd>- zan~Fh&G+_9`95AMGT0MCYO&6-Rh*evVKTc@ zgNTvDM@?rmA}vJXM)KAZc$$!xcZID3Ib>I-l`)dzm}L}95H|g$C0k<5I%<{4-@ybq z&(-2-j@teuHM7;8MFiKPW=Xav9~}ac2pe20fK)7_1TtJI4h~1SAezAK0c=23y<799$G#Q%c#f`f*5G3jx`tw(}X99C+{#mZ*n8nL34Bqrhy0%WmrCgbTAJl&$FTf@q`f!USY zW>#*yz2$a`u(C%)@a++*_lnhf9~LQR@Gc{}B$-q~GA^)=Hb3OE&U`ZglWx`=vWLV2 z+1q+KlICn&zoZvo*cg#(!iRA}t3?(&j$zVuc!LPsilN%krt#hKiUx=|jXgKo2KR z<{c!+1`LR`S8}|-v=}xfdNIrfMk+fP92koBM?*|gQRJ~K0m|e0EZ!)NpF+D+KK(Em zOSdDRCtPGH&A|V4jgx1@rCWr$tzzBQ@$xx$W5(IIz&QQhLyyzrP%TL5oLA*=^m5zK zN;c4jIr@<`4K`JC4OA(cbksZI(kic(dni`(*Gf=Pl=rgA)g}4A#kf&UEdL1mjN=PA?hQ z(iu_kY-Gr%@wOcONGaEe9G(^yg;{Zq5d&#RVr!Ssyi;u63E~i{c8OKH3ad!0M^jLw zHVajo#j4HoYE3r0lu5Z?bMFKBAs!qariEvr)jS#(fFk&zqK8jale9I7#Lqgt*TISX|sC`Mry@_~q zC>ZNGpz2^{AuP-0K?q3nJdNtz`f*J>Ny?whiG?7BUWY1}I` z?iDE<5^BFC)_!ZeY|h<~aW>?$$2Tw{9BJEmTBzhwmjKy;s4#Rc5b5tX%%F#9FdF9_ z3@U$s280G21JdAs&o{N_<7e-z&MbRYSoW+);i%AXOl&xoan{Yb{TZh}e?&-N{90nq zD@)es$3J`_5{o6H@xmI{3xo_sW_!A^$U;b0+zd@FyU{<{g z$J3c%VX}Mb-1O5QrlwNYgHwQ0sr=?XE`@9%k^T_fB2zNo41lTA(;yV( zykz?f1SD4=5Kn|hViYe81kQ~FV@gg@AP`Q30s)Q)kD1!I4HP3&0!J%ij@Ek|n;~gx z*!Vixwlq(%{`L_Tvq#1x>bP7PE~23T#K=^a*Mt3o=F2vi+vg0D!^&C`{>zRzy_4{ zDufPcmumaFFIxt`Zl?uY7w&L5;F7Q#up+z!urgc$SQV}WtPWQJdcxI!HDM2+H(Uc) z8}+qpOln&X4Amn^csb4oxoBbpUW>sX`9~rgjI_}Z z?+-`#5EnfS-Bk8)C?1kWc4~0sQQ*o6ECG=H88Y1v^`)wH&C^^Fr>J-}fxH!=Hi`cm zWap?gnsuqL_u-*Uv*w2~&038%DtLG7Xd=5{63A!8+((6qZzzyAsmG*A6wst z0`d_lA?zBn=&_VFca6fpb;hQaN^7I3rqJ)`;_(Hud01~ow~g9zP3yoP^@Cl&pB4xH z?7hsL!BL;#S|M}161MY{+If z#WzCERF2H4Jav_9@UjtJDk6m9=~PuNmXX*`51ar{QM~fbvW#bs;MpU3_Q2rl@lL!n zd4`-Lv#r}_TDRXGxP4q`-6tX}-7k2a5k1dfLMgAEthgEXr4C6h>>5dX=p$UUCN|h6GE@uGnsZ-dMrOD(c5Fe-CoN+ z%io(!`z;47zo4H!%G-+{B%ZJYDDi}4h)NDy&Qab8`Dd^E6Ebs@_==gQpEXH>%SY%b zK*Z}uEFelZ5#{BKb7{U1B3v-4T+XO6Y=-MuoxPEzUjrvKx+AKBNCM)rdo;2_$cX=Z zS9Fp%LAkO5zp&%lSXWx3JoS0{P13ZfT*mU`3rvGT^RM@j^pTcK<=`B)tCS3S)!GPp z)#9L6NAEXe#a^9Dh5d>1h0I_)dZ8|H4`FTPC*1_kgmZR@f9zcqJ|4 zKCR3Y^YJ|Ha&85REM(4JY_mxm@rs+gzAM8*dfD`ox9y*HPIpdrPXkWNZgM6YuDssX z-RjEmTS-NG6UTzdCoeK7!9`K0R(NE%QF=L1y>Y%k zvHbZ0i5wLl1Gr+EW8?eY=I^^cYrnHU({fN~IVe&%Dy%prt~iE~7Ajv9D_(KJncrZnRCb;ik$r*^{=u zwNI#OUT{W%td)89ZxDG{1%jyx+WeHJ(a5{Pw)s^%@~MxSbv|}mVZI)<8F{iW4;%S$ zf%yVT1#@On%ej64srYat9_=0)h(%hRS%reRG?|k)OB>v4RNfBHAId6fg;RCTGrfX~ zQMIoFk|DNX8r9m{`Totr{jWukBH!T z8oI<1-(-ilqmHFCfr-GZr*+2DDtOk4p0ywYtYE9IrqnfTNW&c7_-i`AAV_5z z9rR!m!QyDa#ZVUr(E~C;aKDMVbhPjWZgXjYDGb>s^A(0{-W7U01h6QoxSZLtPw?*- z5txbznsJJrR;Z-DhFdM^PQlkE`r2lFn`V5Q1Yf)8YtNtD^^E*g2!q($n%#*|SU@ba zmKeioVN}0*u+JkP>|dvV_(0w5pb3b@Q9@B@gyXOgt<@nfH|%VKLoPL3BXl|dFmd2w z3v{W3tu^GwQ{G(Rpw#B-ZJC4`ab0m0uTBGA5|xypvgm&D3dm{YuU6BpA(g11HV zw#<6h&3M-d-u0q)J?Nm61jJ~@S)Z@uQHzN#?*B2s!%h^1mn4sQrAaH#`8ILoOaS?& z0a`LJWgt5Vz z5y_~RCTp=&d)TojNoo5^verIoH^^Ft9&g!2)~LgXr^P5^V~$bBsFjvR3#es~y1nQ( zv-L2w%pi5ioK{d5D;XxYsH|7D7Ri#=5{gL<+3hD4!NNKOBdcygeiL=^v}z?@#U;yN zH<5*|vQ&L8m+CTqhpHF?P|@$bW6pSX3!dGgXE(&Htg3CE^>3T;Z@azmcC+B$DI$1w zA+yGxt`Tcm#!K$j)J_aezADtL6>HYc)@+!m*&x(x6l*q)m(10#N?#D_+s198vle1m zbT?(3P5E+}=!eN=5s`)XHE)kNEm$pIiDF2?TC>~?+-lT}C9f7QY(sn>?aeNq=X+MR z;WD~l`)$elhxwH_h3$FfG`f&VLa~6lA(N@;s%)5~!X&VnYHr+WD>1C=p3KL(F7q8! z!oLilVLjv7CU~}qo^21pdHu?COswA|qqDwAtY14@zhS0+gHXRwtl#(`ER!a}u-uFY z4&Go_reYMsy?kNB)hJFlv|4(<{4aQ-6{kvq=K}p)B&1reWcONtIasM)mHwFyqLj_o zL6nRS@BmM)0<2@b^^?!uxV*61K#gV%-;Btcv@sRG@&#*&Ipvb=en7uwF+v$F&N?E` z&KB-6o|B6CWMnwNM^h2CKaM!|l|>Ev?WHo}WvyhYE|-(FtnZ^vo;CuaKXr|_YSUY$ zmi>N*Q1=A7h0T*yS6?f*eNr=dRen<@FLPmO%uHV9Tm#u+B=iC%FHqNFOkO}*v5ZQR z>jo2-{hKmzZ7PUaT8zQWOGktXoC*1qa87nAxUPL+Ii!PcZ<;*!)|Ojaw4`s!-1R73 z_*c{g#q_nJH^aizvO7sR*KXZNF{>A>xhNHrUqauaV z!rG9yHUx|azOd*EkGq-Dt917=euWjiBB1Yi(f9nU@7Rp**iTyybZXQMjQ>_4p-o_P6C_lYfUNy+c(LS~8xe z1kY2V=P6B5Q0;iHWwz`U{QE=%&wkZT^X$|`I#RV_o8apdeVwzu?ipYAk5&r4{i1I_ zTg%P*+Gc!hf^UQ9+kk||rIQ!lI{qH_?)j4OYx<_2yBQ*Bhd0uEdOyrN1 z2NcQd;zLK)CL3DIW@;R=eGH1^g5+;C5E?NeyNuT1uT1_}AT5Uc7ns&m!w^$NKS3Me zPROdF52jF#B4qwbkTEYS++6TwZJQI7f^Mts(-J!?q`5z&+dl%xU%8hOo2W~_RBbMUs5yU558nY$Sz}GcvqSLg5Is8-q5Q6U z*1vhizj=CK`nYbvE_+l`Q>(y8d3$ybVbhy|?*;_VD$%nF z_4%69FAA``k?WkS0b1Q>rcVm~-6DdgM}DtE^sHvFc`G2_JN7iXGw$^n=lTV#0KXRA z^R7uCyfp&mZi5UA!u!EQ%P3G4-i$(9QHkvCBjU_;@i5^H+6&-(Zz49rK8%njyp8!Y zRE^%M^z~AxulZlB|DE-MZ>{Jfci;kBIyA9;2QB*gtx5}uZ4&%?kw()twI}b&vmj*^ zhrC^YS6u+UJI2&>aKqih5`4kGCO#3TzRkcxg z+cPYrpM2Xo+5MK|mP5V=lxG5{R@z0JQiZ>-V20sV4vg?^e;fb-Yye8hrVPVSrc6++wt&UsDJyK=iko!p($#$r_`vu8041CJSG@Lc~3Dr$T1a1BAVWJ=x z`>ACQBoLa>`5=HQ6ubsU7107Yr$5F~sHenLPvKVZY!^M-X%#|e)Qm@=Ng1j9F?vYtu3B{sW77&c0?arR}0E z!EJa}$S>%~aRASWFzN~s-HP%Mz2NWFpsBNCN z+l=Me+bzjb_96zd+uO-tV5mhi*|F9l*H{-!3~2qREydc4{^UNdwOZ*f^0U1*)kJuUeqCk|Ec!@*DlTWPsaD8Wlb zIGr4gkHjT=l&5cHarE3Um9-2<75l7YXUA%gvI&3f_}eVmhH=;;&mPNMl{|l%9nZ+y zE~R8(>$-`j71b5fUoWYgD4E=ou1IeZmaG<+ti~?MGWXTvH@S&adRh8u!MjHEt`W-C zie+oZEpzn^-Xqq884SjaAb(ypsZc*}-N_3@6!vPnG_wRZA6ilhSUnU?3R7 zMixfTG0A#19Fgp26S3%7Y;M7hmsl*1F_69)#Z#5~8A49`zi1Huy8xIHD(W(D9aO9r zE7s#nO7;G6$N2f{!S7rIso$-rny8!HB2+9FE0&Kt?v^jPItVton092=bj|poA?_5t zJB9LHV)?Gw@~3CYpBBpZiRJsot#`p>&P?69sgPK=QCPA`T(SvlR#81$v3#atxlqw8 zRy3nR)L%QfDqVGJtx&N_tXRc9<#c^yd`$h4KyPaUM<=VelLSr?c$omH0bH0soWMl_ z-zM-|1inMyw+Vcg0Bz6WsJGnj5%`w`zDIx@{@lMNK*t)n9}@Uu0)I;23j+Uvz<(m} zHw5Yl(3S`JEafW{BhZIG{x`sGSG0d~ww{cw=blYFddm*s;`}X6;%cDOcxZNs#ok1x zWEFr@vN0?sG_b@@w;I6NUDTohoZZEd zUkx~I_GapW0!kfJsRmFLGBi-`vTwL&(m<`&T-I;@2HO$0tdXgMRuZCG2}R$eZZb zj{6Sdv@i2#@{jLCudXH9iQZE5T6dyXKS^ks8CgGR7m;4G2wT$Xc*&!tK>d-ev?hA> zMeylGn|f~)k72gw&zNSs`(4x9mLxP5^~#TZsbi^-MWGaewIk+&bIw>`ceAUu^kt zr_gas>^PQr@r2NELTEWDwwx52Pl?T^GIarjYtF0Xcimpyjw3zpvRBaKU(n@>;7zA=FlHujGh#+=QNY|P8_W4>{oL9b?mPW9=AHl-JSZG}pBb%Ve3rS!$`U4G~C zXZ-BeXJ)oO^TnzkuMxH$6}KK0Rv!~rAImI#3E^6q=&Zl%ZV=teGtT7;sJ8#mDZdye z3H>cYkV*Lj|7{{{Huyz24Y&ZUJK3PpF+#(qqt#S=G(^0%I(T^?sV41NdlqB$Y4Lvzbja;_b3DX*x0W(kFor1D_xMlfWMa zzBu;dK4Hg8;*OVub;reZ$1_bQ5U!PDo7r7=qv+0VGt-OVUzstl*rR+0*WYu%-x4ZF z)=ar(Bkz*8NiQ(!C9=2(lczrA%@g1uma&3Hdz(Dk^}(r&pIrX%^5^{Q&KG8OzK}V5 zTs(YA*!i-!^JQUuKwKZl)CUo+xv)k4uDedRMZOms66Re){7>S=zbEj&3H%=d|Brwf zFV9u?VIPq{xl>Fn`zN^5tNXh$wq1GZzNR%Z{TZ4xbY%_Tb_Lxk0Jk}x%z<)jAq|-T za-pN=112O}mrIst0v}Aj1XTw6DTXh}>rH#`G)^qDb4&CI1SFGoCb^=+my{3aOGRqL zF^tdg2YI%6Lvr&Wlxd@{CSW67l9!6LsBEe!r~ix~cBw6LahSeYEfuK|%kV|1TFD&X zg2RJ>#OX8GfXibew&B(?kdWNZ9J-Vo#MWHpe>>oaBP6%-xcXlnaI|8VD&!_HVi``v zz^fdo9vp3;k@x>I{QQh=Um-x+1&(af|3zS2xBb$&UH(Q>7e{*}5KR0(1H5N7o6SEn z6<=Zh=1i_D?BATJGNXn$lQ&}wbEdkCG0d47GHRGJHD-)q&a^aR40ERXj4{lamSv1# z&a@(940EQ|j4{la)@2HXd!?r0)+_dVjxICSkNM!|l=h2k#x9GgsPf9$Z^vJcU$NeE zoVA!imWAQZS^6*ZxqWv1)3ydPs5T$`oYH=g&Dd^oR$Y1Z+hebfU9r(WM%Dix&A#Gj literal 0 HcmV?d00001 diff --git a/ptychoscopy/calibrations.xlsx b/ptychoscopy/calibrations.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..993ddcc1ff31efea96dece8fd5cc7b8cbbeaf8a0 GIT binary patch literal 71481 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

3sO+#6a$SYD!fi7D4Lgj8-?9Gw~{c?t?U6; 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 diff --git a/sd_0527720.cif b/sd_0527720.cif deleted file mode 100644 index 495675d..0000000 --- a/sd_0527720.cif +++ /dev/null @@ -1,155 +0,0 @@ -##CIF_1.1 - -data_sm_global -#Used dictionaries -loop_ -_audit_conform_dict_name -_audit_conform_dict_version -_audit_conform_dict_location -cif_core.dic 2.4.2 . -cif_pd.dic 1.0.1 . -cif_sm.dic 0.1 'redaktion.landolt-boernstein(at)springer.com' - -#About this content and reference -_sm_credits_copyright -;PAULING FILE Multinaries Edition - 2012. SpringerMaterials Release 2014. -http://www.paulingfile.com -Unique LPF ID Number SD0527720 -Project Coordinator: Shuichi Iwata -Section-Editors: Karin Cenzual (Crystal Structures), Hiroaki Okamoto (Phase -Diagrams), Fritz Hulliger (Physical Properties) -(c) Springer & Material Phases Data System (MPDS), Switzerland & National -Institute for Materials Science (NIMS), Japan 2014. -(Data generated pre-2002: (c) Springer & MPDS & NIMS; -post-2001: (c) Springer & MPDS) -All Rights Reserved. Version 2014.06. -; - -_audit_creation_method -;This data have been compiled from the crystallographic datasheet for -"SmB6 Crystal Structure" -taken from SpringerMaterials (sm_isp_sd_0527720). -; - -_publ_section_references -;Paderno Y.B., Lundstrom T.: On the Homogeneity Ranges of LaB6, EuB6 and SmB6. Acta Chemica Scandinavica, Series A: Physical and Inorganic Chemistry 37 (1983) 609-612. -; - -#Phase classification -_sm_phase_labels 'SmB6' -_chemical_name_mineral '' -_sm_chemical_compound_class 'boride' -_sm_phase_prototype 'CaB6 ' -_sm_pearson_symbol 'cP7' -_symmetry_Int_Tables_number 221 -_sm_sample_details -;chemical analysis; B85.76Sm14.24, -powder (determination of cell parameters) -; -_sm_measurement_details -;Guinier-Hägg film (determination of cell parameters), -X-rays, Cu Kα1; λ = 0.1540598 nm (determination of cell parameters) -; -_sm_interpretation_details -;cell parameters determined and structure type assigned; composition dependence studied -; - -data_sm_isp_SD0527720-standardized_unitcell -#Cell Parameters -_cell_length_a 4.1334 -_cell_length_b 4.1334 -_cell_length_c 4.1334 -_cell_angle_alpha 90 -_cell_angle_beta 90 -_cell_angle_gamma 90 -_sm_length_ratio_ab 1.000 -_sm_length_ratio_bc 1.000 -_sm_length_ratio_ca 1.000 -_cell_volume 70.62 -_symmetry_space_group_name_H-M 'Pm-3m' -_symmetry_Int_Tables_number 221 -_cell_formula_units_Z 1 -_sm_cell_transformation -;No transformation from published to standardized cell parameters necessary. -; - -#Atom Coordinates -loop_ -_atom_site_label -_atom_site_type_symbol -_atom_site_Wyckoff_symbol -_sm_site_symmetry -_atom_site_fract_x -_atom_site_fract_y -_atom_site_fract_z -_atom_site_occupancy -_sm_coordination_number -_sm_atomic_environment_type -B1 'B' .6f .4m.m 0.207 0.5 0.5 1 ? '?' -Sm1 'Sm' .1a .m-3m 0 0 0 1 ? '?' - -_sm_atom_site_transformation -;No transformation from published to standardized cell parameters necessary. -Atom coordinates assigned by editor. -; - -data_sm_isp_SD0527720-published_cell -#Cell Parameters -_cell_length_a 4.1334(2) -_cell_length_b 4.1334(2) -_cell_length_c 4.1334(2) -_cell_angle_alpha 90 -_cell_angle_beta 90 -_cell_angle_gamma 90 -_sm_length_ratio_ab 1.000 -_sm_length_ratio_bc 1.000 -_sm_length_ratio_ca 1.000 -_cell_volume 70.62 -_symmetry_space_group_name_H-M 'Pm-3m' -_symmetry_Int_Tables_number 221 -_cell_formula_units_Z 1 - -#Atom Coordinates -loop_ -_atom_site_label -_atom_site_type_symbol -_atom_site_Wyckoff_symbol -_sm_site_symmetry -_atom_site_fract_x -_atom_site_fract_y -_atom_site_fract_z -_atom_site_occupancy -_sm_coordination_number -_sm_atomic_environment_type -? ? ? ? ? ? ? ? ? ? - -data_sm_isp_SD0527720-niggli_reduced_cell -#Cell Parameters -_cell_length_a 4.1334 -_cell_length_b 4.1334 -_cell_length_c 4.1334 -_cell_angle_alpha 90 -_cell_angle_beta 90 -_cell_angle_gamma 90 -_sm_length_ratio_ab 1.000 -_sm_length_ratio_bc 1.000 -_sm_length_ratio_ca 1.000 -_cell_volume 70.62 -_symmetry_space_group_name_H-M '' -_symmetry_Int_Tables_number ? -_cell_formula_units_Z 1 - -#Atom Coordinates -loop_ -_atom_site_label -_atom_site_type_symbol -_atom_site_Wyckoff_symbol -_sm_site_symmetry -_atom_site_fract_x -_atom_site_fract_y -_atom_site_fract_z -_atom_site_occupancy -_sm_coordination_number -_sm_atomic_environment_type -? ? ? ? ? ? ? ? ? ? -