{ "cells": [ { "cell_type": "markdown", "metadata": { "hideCode": true, "hidePrompt": true }, "source": [ "\n", "\n", " **Chapter 4: [Spectroscopy](CH4_00-Spectroscopy.ipynb)** \n", "\n", "
\n", "\n", "\n", "\n", "# Analysis of Core-Loss Spectra\n", "\n", " **Try this notebook in Google Colab** \n", "\n", "\n", "[Download](https://raw.githubusercontent.com/gduscher/MSE672-Introduction-to-TEM/main/Spectroscopy/CH4_09-Analyse_Core_Loss.ipynb)\n", " \n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](\n", " https://colab.research.google.com/github/gduscher/MSE672-Introduction-to-TEM/blob/main/Homework/Homework07-Dynamic_CBED.ipynb)\n", "\n", "\n", "\n", "part of \n", "\n", " **[MSE672: Introduction to Transmission Electron Microscopy](../_MSE672_Intro_TEM.ipynb)**\n", "\n", "**Spring 2024**\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Gerd Duscher Khalid Hattar
Microscopy Facilities Tennessee Ion Beam Materials Laboratory
Materials Science & Engineering Nuclear Engineering
Institute of Advanced Materials & Manufacturing
The University of Tennessee, Knoxville
\n", "\n", "Background and methods to analysis and quantification of data acquired with transmission electron microscopes.\n" ] }, { "cell_type": "markdown", "metadata": { "hideCode": true, "hidePrompt": true }, "source": [ "## Content\n", "\n", "Quantitative determination of chemical composition from a core-loss EELS spectrum\n", "\n", "Please cite:\n", "\n", "[M. Tian et al. *Measuring the areal density of nanomaterials by electron energy-loss spectroscopy*\n", "Ultramicroscopy Volume 196, 2019, pages 154-160](https://doi.org/10.1016/j.ultramic.2018.10.009)\n", "\n", "as a reference of this quantification method.\n", "\n", "## Load important packages\n", "\n", "### Check Installed Packages" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "installing pyTEMlib\n", "done\n" ] } ], "source": [ "import sys\n", "import importlib.metadata\n", "def test_package(package_name):\n", " \"\"\"Test if package exists and returns version or -1\"\"\"\n", " try:\n", " version = importlib.metadata.version(package_name)\n", " except importlib.metadata.PackageNotFoundError:\n", " version = '-1'\n", " return version\n", "\n", "if test_package('pyTEMlib') < '0.2024.4.0':\n", " print('installing pyTEMlib')\n", " !{sys.executable} -m pip install --upgrade pyTEMlib -q\n", "\n", "print('done')" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false }, "source": [ "### Import all relevant libraries\n", "\n", "Please note that the EELS_tools package from pyTEMlib is essential." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "hideCode": true, "hidePrompt": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You don't have igor2 installed. If you wish to open igor files, you will need to install it (pip install igor2) before attempting.\n", "You don't have gwyfile installed. If you wish to open .gwy files, you will need to install it (pip install gwyfile) before attempting.\n", "Symmetry functions of spglib enabled\n", "pyTEM version: 0.2024.04.0\n" ] } ], "source": [ "import sys\n", "%matplotlib ipympl\n", "if 'google.colab' in sys.modules: \n", " from google.colab import output\n", " from google.colab import drive\n", " output.enable_custom_widget_manager()\n", " \n", "import numpy as np\n", "import matplotlib.pylab as plt\n", "import sys\n", "sys.path.insert(0, '../../pyTEMlib')\n", "# Import libraries from pyTEMlib\n", "import pyTEMlib\n", "from pyTEMlib import file_tools # File input/ output library\n", "import pyTEMlib.image_tools as it\n", "import pyTEMlib.eels_tools as eels # EELS methods \n", "%load_ext autoreload\n", "%autoreload 2\n", "import pyTEMlib.info_widget\n", "import pyTEMlib.eels_dialog\n", "\n", "# For archiving reasons it is a good idea to print the version numbers out at this point\n", "print('pyTEM version: ',pyTEMlib.__version__)\n", "__notebook__ = 'analyse_core_loss'\n", "__notebook_version__ = '2023_05_05'\n", "\n", "if 'google.colab' in sys.modules:\n", " drive.mount(\"/content/drive\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load and plot a spectrum\n", "\n", "As an example we load the spectrum **1EELS Acquire (high-loss).dm3** from the *example data* folder.\n", "\n", "First a dialog to select a file will apear.\n", "\n", "Once you have selected a main datase, the dataset will be plotted on the right.\n", "\n", "Then select the ``Info`` tab, in which we set the experimental parameters.\n", "\n", "Select the cursor on known features in the spectrum and eneter the known energies of the features on the top of the spectrum.\n", "\n", "Please use the ``Energy Scale`` button in the ``Info`` tab to change the energy scale. When pressed the start and end energies of the selected cursor will be used to reculculate the energy scale\n" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4d6dffa34a2041b9835e8d1333881f29", "version_major": 2, "version_minor": 0 }, "text/plain": [ "AppLayout(children=(Tab(children=(GridspecLayout(children=(Dropdown(description='directory:', layout=Layout(gr…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "if 'google.colab' in sys.modules:\n", " if not os.path.exists('./1EELS Acquire (high-loss).dm3'):\n", " !wget https://github.com/gduscher/MSE672-Introduction-to-TEM/raw/main/example_data/1EELS Acquire (high-loss).dm3\n", " !wget https://github.com/gduscher/MSE672-Introduction-to-TEM/raw/main/example_data/1EELS Acquire (low-loss).dm3\n", " \n", "info = pyTEMlib.info_widget.InfoWidget()" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['Channel_000', '_relationship'])" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info.datasets.keys()" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 1)" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info.sd0, info.sds" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5822d52f04b74446ae0bb23cda77bd03", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(Dropdown(description='directory:', layout=Layout(width='90%'), options=('C:\\\\Users\\\\gduscher\\\\D…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "w = file_tools.FileWidget()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(100.0, 100.25)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e8b9ca8e6bc94d7ab7c0360ada92f1b8", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "v = w.selected_dataset.plot()\n", "w.selected_dataset.energy_loss[0],w.selected_dataset.energy_loss[1]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a1a4a9cb3e324bd49b74dd43f4d9b2cb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "AppLayout(children=(GridspecLayout(children=(ToggleButton(value=False, button_style='info', description='Fit A…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "quantification = pyTEMlib.eels_dialog.CompositionWidget(datasets=info.datasets, key='Channel_000')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Chemical Composition \n", "The fit of the cross-section and background to the spectrum results in the chemical composition. If the calibration is correct this composition is given as areal density in atoms/nm$^2$\n", "\n", "\n", "### Fit of Data\n", "A dialog window will open, enter the elements first (0 will open a periodic table) and press \n", "``Fit Composition`` button (bottom right). Adjust parameters as needed and check fit by pressing the ``Fit Composition`` button again.\n", "\n", "Select the ``Region`` checkbox to see which parts of the spectrum you choose to fit.\n", "\n", "Changing the multiplier value will make a simulation of your spectrum.\n", "\n", "The ``InfoDialog``, if open, still works to change experimental parameters and the energy scale." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n" ] } ], "source": [ "found_edges = eels.auto_id_edges(quantification .dataset)\n", "found_edges\n", "to_delete = []\n", "if len(found_edges) >0:\n", " for key in quantification.edges:\n", " if key.isdigit():\n", " to_delete.append(key)\n", "for key in to_delete:\n", " del quantification.edges[key]\n", "if '0' not in quantification.edges:\n", " quantification.edges['0'] = {}\n", "selected_elements = []\n", "for key in found_edges:\n", " selected_elements.append(key)\n", "#view.set_elements(selected_elements)\n", "\n", "for index, elem in enumerate(selected_elements):\n", " print(index)\n", " quantification.update_element(elem, index)\n", "quantification.update()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'ImageData': {'Calibrations': {'Brightness': {'Origin': 0.0,\n", " 'Scale': 1.0,\n", " 'Units': 'Counts'},\n", " 'Dimension': {'0': {'Origin': -1400.0, 'Scale': 0.25, 'Units': 'eV'}},\n", " 'DisplayCalibratedUnits': 1},\n", " 'Data': 'read',\n", " 'DataType': 2,\n", " 'Dimensions': {'0': 2048},\n", " 'PixelDepth': 4},\n", " 'ImageTags': {'Acquisition': {'Device': {'Active Size (pixels)': [2048, 520],\n", " 'Camera Number': 0,\n", " 'CCD': {'Pixel Size (um)': [14.0, 14.0]},\n", " 'Configuration': {'Transpose': {'Diagonal Flip': 0,\n", " 'Horizontal Flip': 0,\n", " 'Vertical Flip': 0}},\n", " 'Name': 'QUEFINA 1',\n", " 'Source': 'QUEFINA 1'},\n", " 'Frame': {'Area': {'Transform': {'Class Name': 'cm_acquisitiontransform_list',\n", " 'Transform List': {'0': {'Binning': [1, 130],\n", " 'Class Name': 'cm_acquisitiontransform',\n", " 'Sub Area Adjust': [0, 0, 0, 0],\n", " 'Transpose': {'Diagonal Flip': 0,\n", " 'Horizontal Flip': 0,\n", " 'Vertical Flip': 0}}}}},\n", " 'CCD': {'Pixel Size (um)': [1820.0, 14.0]},\n", " 'Intensity': {'Transform': {'Class Name': 'cm_valuetransform_list',\n", " 'Transform List': {'0': {'Class Name': 'cm_valuetransform_affine',\n", " 'Offset': 250.0,\n", " 'Scale': 1.0},\n", " '1': {'ADC Max': 65535.0,\n", " 'ADC Min': 0.0,\n", " 'Class Name': 'cm_valuetransform_adc'}}}}},\n", " 'Parameters': {'Acquisition Write Flags': 4294967295,\n", " 'Base Detector': {'Class Name': 'cm_namedcameradetectorparameterset',\n", " 'Name': 'default'},\n", " 'Detector': {'continuous': 1,\n", " 'exposure (s)': 2.0,\n", " 'hbin': 1,\n", " 'height': 260,\n", " 'left': 0,\n", " 'top': 130,\n", " 'vbin': 130,\n", " 'width': 2048},\n", " 'Environment': {'Mode Name': 'Spectroscopy'},\n", " 'High Level': {'Acquisition Buffer Size': 0,\n", " 'Antiblooming': 0,\n", " 'Binning': [1, 130],\n", " 'CCD Read Area': [130, 0, 390, 2048],\n", " 'CCD Read Ports': 1,\n", " 'Choose Number Of Frame Shutters Automatically': 1,\n", " 'Class Name': 'cm_camera_highlevelparameters',\n", " 'Continuous Readout': 1,\n", " 'Corrections': 305,\n", " 'Corrections Mask': 817,\n", " 'Exposure (s)': 2.0,\n", " 'Number Of Frame Shutters': 1,\n", " 'Processing': 'Dark Subtracted',\n", " 'Quality Level': 1,\n", " 'Read Frame Style': 0,\n", " 'Read Mode': 13,\n", " 'Secondary Shutter Post Exposure Compensation (s)': 0.0,\n", " 'Secondary Shutter Pre Exposure Compensation (s)': 0.0,\n", " 'Shutter': {'Primary Shutter States': 0,\n", " 'Primary Shutter States Mask': 0,\n", " 'Secondary Shutter States': 0,\n", " 'Secondary Shutter States Mask': 0,\n", " 'Shutter Exposure': 0,\n", " 'Shutter Index': 0},\n", " 'Shutter Post Exposure Compensation (s)': 0.0,\n", " 'Shutter Pre Exposure Compensation (s)': 0.0,\n", " 'Transform': {'Diagonal Flip': 0,\n", " 'Horizontal Flip': 0,\n", " 'Vertical Flip': 0}},\n", " 'Objects': {'0': {'Class Name': 'cm_imgproc_finalcombine',\n", " 'Frame Combine Style': 'Copy',\n", " 'Parameter 1': 1.0}},\n", " 'Parameter Set Name': 'Acquire',\n", " 'Parameter Set Tag Path': 'Spectroscopy:Acquire:Acquire',\n", " 'Version': 33947648}},\n", " 'EELS': {'Acquisition': {'Continuous mode': 0,\n", " 'Date': '12/14/2019',\n", " 'End time': '1:31:04 PM',\n", " 'Exposure (s)': 2.0,\n", " 'Integration time (s)': 20.0,\n", " 'Number of frames': 10,\n", " 'Saturation fraction': 0.21766255795955658,\n", " 'Start time': '1:30:41 PM'},\n", " 'Experimental Conditions': {'Collection semi-angle (mrad)': 33.0,\n", " 'Convergence semi-angle (mrad)': 30.0}},\n", " 'EELS Spectrometer': {'Dispersion (eV/ch)': 0.25,\n", " 'Dispersion index': 4,\n", " 'Drift tube enabled': 1,\n", " 'Drift tube voltage (V)': 400.0,\n", " 'Energy loss (eV)': 400.0,\n", " 'HT offset (V)': 0.0,\n", " 'HT offset enabled': 0.0,\n", " 'Instrument ID': 3977,\n", " 'Instrument name': 'Enfinium ER NION',\n", " 'Mode': 0,\n", " 'Prism offset (V)': -0.0,\n", " 'Prism offset enabled ': 1},\n", " 'Meta Data': {'Acquisition Mode': 'Parallel dispersive',\n", " 'Format': 'Spectrum',\n", " 'Signal': 'EELS'},\n", " 'Microscope Info': {'Cs(mm)': 0.0,\n", " 'Emission Current (A)': 0.0,\n", " 'Formatted Indicated Mag': '100x',\n", " 'Formatted Voltage': '200kV',\n", " 'Illumination Mode': 'STEM',\n", " 'Imaging Mode': 'IMAGING',\n", " 'Indicated Magnification': 100.0,\n", " 'Name': 'Unknown',\n", " 'Operation Mode': 'SCANNING',\n", " 'Probe Current (nA)': 0.0,\n", " 'Probe Size (nm)': 0.0,\n", " 'STEM Camera Length': 2.8,\n", " 'Voltage': 200000.0},\n", " 'Session Info': {'Items': {'0': {'Data Type': 20,\n", " 'Label': 'Specimen',\n", " 'Precision': 0,\n", " 'Tag path': 'Session Info:Specimen',\n", " 'Units': '',\n", " 'Value': ''},\n", " '1': {'Data Type': 20,\n", " 'Label': 'Operator',\n", " 'Precision': 0,\n", " 'Tag path': 'Session Info:Operator',\n", " 'Units': '',\n", " 'Value': ''},\n", " '2': {'Data Type': 20,\n", " 'Label': 'Microscope',\n", " 'Precision': 0,\n", " 'Tag path': 'Session Info:Microscope',\n", " 'Units': '',\n", " 'Value': ''}},\n", " 'Microscope': '',\n", " 'Operator': '',\n", " 'Specimen': ''}},\n", " 'Name': '01-EELS Acquire_STO',\n", " 'UniqueID': {'0': 774116825, '1': 412555428, '2': 1897604613, '3': 952377132},\n", " 'DM': {'dm_version': 3,\n", " 'file_size': 322611,\n", " 'full_file_name': 'C:\\\\Users\\\\gduscher\\\\Documents\\\\Github\\\\MSE672-Introduction-to-TEM\\\\example_data\\\\EELS_STO.dm3'},\n", " 'original_filename': 'C:\\\\Users\\\\gduscher\\\\Documents\\\\Github\\\\MSE672-Introduction-to-TEM\\\\example_data\\\\EELS_STO.dm3',\n", " 'ApplicationBounds': [0, 0, 1065, 1916],\n", " 'DocumentObjectList': {'0': {'AnnotationGroupList': {},\n", " 'AnnotationType': 20,\n", " 'BackgroundColor': [-1, -1, -1],\n", " 'BackgroundMode': 2,\n", " 'FillMode': 2,\n", " 'ForegroundColor': [-1, 0, 0],\n", " 'HasBackground': 0,\n", " 'ImageDisplayInfo': {'BackgroundColor': [-5655, -5655, -5655],\n", " 'BackgroundOn': 1,\n", " 'CalibrationSliceId': {'0': 0},\n", " 'CaptionAttributes': 7,\n", " 'CaptionColor': [0, 0, 0],\n", " 'CaptionFaceName': 'Lucida Sans Unicode',\n", " 'CaptionOn': 1,\n", " 'CaptionSize': 10,\n", " 'CursorOn': 0,\n", " 'CursorPosition': 0.0,\n", " 'DimensionLabels': {'0': ''},\n", " 'DynamicContrast': 1,\n", " 'FrameOn': 1,\n", " 'GridColor': [0, -1, -1],\n", " 'GridOn': 1,\n", " 'GroupId': 0,\n", " 'GroupList': {'0': {'DoAutoSurveyHigh': 1,\n", " 'DoAutoSurveyLow': 1,\n", " 'GroupToDisplay': {'Offset': [-0.0, -0.0],\n", " 'Scale': [0.00048828125, 4.16666489400086e-06]},\n", " 'TrackStyleX': 0,\n", " 'TrackStyleY': 0}},\n", " 'LegendOn': 0,\n", " 'MainSliceId': {'0': 0},\n", " 'NumHorizontalTicks': 1,\n", " 'NumVerticalTicks': 1,\n", " 'SliceList': {'0': {'BaseIntensity': 0.0,\n", " 'ComplexMode': 4,\n", " 'DrawFill': 1,\n", " 'DrawLine': 0,\n", " 'DrawTransparent': 0,\n", " 'FillColor': [23644, -16449, -16449],\n", " 'Horz Pos Fixed': 1,\n", " 'Horz Scale Fixed': 1,\n", " 'ImageToGroup': {'Offset': [0.0, 0.0], 'Scale': [1.0, 1.0]},\n", " 'IsVisible': 1,\n", " 'LineColor': [0, -32640, -16449],\n", " 'LineStyle': 0,\n", " 'LineThickness': 1,\n", " 'SliceGroup': 0,\n", " 'SliceId': {'0': 0},\n", " 'Transparency': 0.0,\n", " 'TransparencyStyle': 0,\n", " 'Vert Pos Fixed': 1,\n", " 'Vert Scale Fixed': 1}},\n", " 'SurveyRegion': 1},\n", " 'ImageDisplayType': 3,\n", " 'ImageSource': 0,\n", " 'IsMoveable': 1,\n", " 'IsResizable': 1,\n", " 'IsSelectable': 1,\n", " 'IsTranslatable': 1,\n", " 'IsVisible': 1,\n", " 'ObjectTags': {},\n", " 'Rectangle': [0.0, 0.0, 342.0, 669.0],\n", " 'UniqueID': 8}},\n", " 'DocumentTags': {},\n", " 'HasWindowPosition': 1,\n", " 'Image Behavior': {'DoIntegralZoom': 0,\n", " 'ImageDisplayBounds': [0.0, 0.0, 342.0, 669.0],\n", " 'IsZoomedToWindow': 1,\n", " 'UnscaledTransform': {'Offset': [0.0, 0.0], 'Scale': [1.0, 1.0]},\n", " 'ViewDisplayID': 8,\n", " 'WindowRect': [0.0, 0.0, 342.0, 669.0],\n", " 'ZoomAndMoveTransform': {'Offset': [0.0, 0.0], 'Scale': [1.0, 1.0]}},\n", " 'ImageSourceList': {'0': {'ClassName': 'ImageSource:Simple',\n", " 'Extra Slice Info': {'0': {'Id': {'0': 0}, 'Label': 'Spectrum'}},\n", " 'Id': {'0': 0},\n", " 'ImageRef': 1}},\n", " 'InImageMode': 1,\n", " 'MinVersionList': {'0': {'RequiredVersion': 50659328}},\n", " 'NextDocumentObjectID': 9,\n", " 'Page Behavior': {'DoIntegralZoom': 0,\n", " 'DrawMargins': 1,\n", " 'DrawPaper': 1,\n", " 'IsFixedInPageMode': 0,\n", " 'IsZoomedToWindow': 1,\n", " 'LayedOut': 0,\n", " 'PageTransform': {'Offset': [0.0, 0.0], 'Scale': [1.0, 1.0]},\n", " 'RestoreImageDisplayBounds': [0.0, 0.0, 342.0, 669.5],\n", " 'RestoreImageDisplayID': 8,\n", " 'TargetDisplayID': 4294967295},\n", " 'PageSetup': {'General': [1, 1000, 8500, 11000, 1000, 1000, -1000, -1000],\n", " 'Win32': b'\\x04\\x00\\x00\\x004!\\x00\\x00\\xf8*\\x00\\x00M\\x01\\x00\\x00M\\x01\\x00\\x00\\xfa\\x00\\x00\\x00\\xfa\\x00\\x00\\x00\\xe8\\x03\\x00\\x00\\xe8\\x03\\x00\\x00\\xe8\\x03\\x00\\x00\\xe8\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x01\\x00\\x01\\x00\\x01\\x00\\x01\\x00\\x18\\x00',\n", " 'Win32_DevModeW': b'S\\x00e\\x00n\\x00d\\x00 \\x00T\\x00o\\x00 \\x00O\\x00n\\x00e\\x00N\\x00o\\x00t\\x00e\\x00 \\x002\\x000\\x001\\x000\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x04\\x00\\x06\\xdc\\x00\\x0c\\x03\\x03\\xff\\x00\\x00\\x01\\x00\\x01\\x00\\xea\\no\\x08d\\x00\\x01\\x00\\x0f\\x00X\\x02\\x02\\x00\\x01\\x00X\\x02\\x02\\x00\\x00\\x00L\\x00e\\x00t\\x00t\\x00e\\x00r\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00DINU\"\\x00\\xd0\\x00\\x0c\\x03\\x00\\x00\\xc2\\xac\\x90Q\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\\x00\\x07\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xd0\\x00\\x00\\x00SMTJ\\x00\\x00\\x00\\x00\\x10\\x00\\xc0\\x00S\\x00e\\x00n\\x00d\\x00 \\x00T\\x00o\\x00 \\x00M\\x00i\\x00c\\x00r\\x00o\\x00s\\x00o\\x00f\\x00t\\x00 \\x00O\\x00n\\x00e\\x00N\\x00o\\x00t\\x00e\\x00 \\x002\\x000\\x001\\x000\\x00 \\x00D\\x00r\\x00i\\x00v\\x00e\\x00r\\x00\\x00\\x00RESDLL\\x00UniresDLL\\x00PaperSize\\x00LETTER\\x00Orientation\\x00PORTRAIT\\x00Resolution\\x00DPI600\\x00ColorMode\\x0024bpp\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00',\n", " 'Win32_DevNamesW': b'\\x04\\x00*\\x00?\\x00\\x00\\x00S\\x00e\\x00n\\x00d\\x00 \\x00T\\x00o\\x00 \\x00M\\x00i\\x00c\\x00r\\x00o\\x00s\\x00o\\x00f\\x00t\\x00 \\x00O\\x00n\\x00e\\x00N\\x00o\\x00t\\x00e\\x00 \\x002\\x000\\x001\\x000\\x00 \\x00D\\x00r\\x00i\\x00v\\x00e\\x00r\\x00\\x00\\x00S\\x00e\\x00n\\x00d\\x00 \\x00T\\x00o\\x00 \\x00O\\x00n\\x00e\\x00N\\x00o\\x00t\\x00e\\x00 \\x002\\x000\\x001\\x000\\x00\\x00\\x00n\\x00u\\x00l\\x00:\\x00\\x00\\x00'},\n", " 'SentinelList': {},\n", " 'Thumbnails': {'0': {'ImageIndex': 0, 'SourceSize_Pixels': [669, 342]}},\n", " 'WindowPosition': [410, 8, 752, 677]}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "main_dataset.original_metadata" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "89a80a12356346889ff10daf682ebc60", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABV8klEQVR4nO3deXxU9b3/8fdksu8EskKAgGwCsrmhgFhaFJfq1bZqvWrtrfdn61Kl1pbualvaar3Ua9Va92td2uLWSlFUFhGoAgGRTfaEkBACZCXJZGbO74+TmSSQQJZJzsw5r+fjMY85M3Nm5hMmMG++q8swDEMAAABwjCirCwAAAEDfIgACAAA4DAEQAADAYQiAAAAADkMABAAAcBgCIAAAgMMQAAEAAByGAAgAAOAwBEAAAACHIQACAAA4DAEQAADAYQiAAAAADkMABAAAcBgCIAAAgMMQAAEAAByGAAgAAOAwBEAAAACHIQACAAA4DAEQAADAYQiAAAAADkMABAAAcBgCIAAAgMMQAAEAAByGAAgAAOAwBEAAAACHIQACAAA4DAEQAADAYQiAAAAADkMABAAAcBgCIAAAgMMQAAEAAByGAAgAAOAwBEAAAACHIQACAAA4DAEQAADAYQiAAAAADkMABAAAcBgCIAAAgMMQAAEAAByGAAgAAOAwBEAAAACHIQACAAA4DAEwRFasWKHLL79ceXl5crlceuONN3r1/bxer37yk5+ooKBACQkJGjZsmO6//375/f5efV8AABD5oq0uwC7q6uo0YcIE3Xzzzbr66qt7/f1++9vf6oknntDzzz+vsWPHau3atbr55puVlpam7373u73+/gAAIHIRAENkzpw5mjNnToePezwe/eQnP9Ff/vIXVVZWaty4cfrtb3+rmTNnduv9Vq9erSuuuEKXXnqpJGno0KF6+eWXtXbt2m69HgAAcA66gPvIzTffrI8++kivvPKKPv30U331q1/VxRdfrB07dnTr9aZNm6b3339fn3/+uSRp48aNWrlypS655JJQlg0AAGyIFsA+sGvXLr388svav3+/8vLyJEn33HOPFi9erGeffVa//vWvu/yaP/jBD1RVVaXRo0fL7XbL5/PpV7/6la677rpQlw8AAGyGANgH1q9fL8MwNHLkyDb3NzY2qn///pKkvXv3qqCg4KSvc9ttt+nRRx+VJL366qt6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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(quantification.dataset.metadata['edges']['0']['data'])\n", "plt.plot(quantification.dataset.metadata['edges']['1']['data'])\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "view.update()\n", "view.find_elements(1)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'datasets' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[48], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m datasets[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mChannel_000\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmetadata[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124medges\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m0\u001b[39m\u001b[38;5;124m'\u001b[39m: {}, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m'\u001b[39m: {}}\n\u001b[0;32m 2\u001b[0m datasets[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mChannel_000\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmetadata[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124medges\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124muse_low_loss\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m 4\u001b[0m composition \u001b[38;5;241m=\u001b[39m ieels\u001b[38;5;241m.\u001b[39mCompositionDialog(datasets)\n", "\u001b[1;31mNameError\u001b[0m: name 'datasets' is not defined" ] } ], "source": [ "datasets['Channel_000'].metadata['edges'] = {'0': {}, 'model': {}}\n", "datasets['Channel_000'].metadata['edges']['use_low_loss']=False\n", "\n", "composition = ieels.CompositionDialog(datasets)\n", "view = composition.figure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Output of Results" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Relative chemical composition of 2EELS Acquire (high-loss)\n", "B: 23.5 %\n", "N: 76.5 %\n" ] } ], "source": [ "main_dataset = quantification.dataset\n", "edges = main_dataset.metadata['edges']\n", "element = []\n", "areal_density = []\n", "for key, edge in edges.items():\n", " if key.isdigit():\n", " element.append(edge['element'])\n", " areal_density.append(edge['areal_density'])\n", " \n", "print('Relative chemical composition of ', main_dataset.title)\n", "\n", "for i in range(len(element)):\n", " print(f'{element[i]}: {areal_density[i]/np.sum(areal_density)*100:.1f} %')\n", " \n", "saved_edges_metadata = edges\n", "\n" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'model': {'background': array([-4.04651023e+14, -4.06877535e+14, -4.09110155e+14, ...,\n", " -1.77235423e+16, -1.77382597e+16, -1.77529832e+16]),\n", " 'background-poly_0': -44450023942.34783,\n", " 'background-poly_1': -132.73805028510603,\n", " 'background-poly_2': 0.12179848936383898,\n", " 'background-A': 44450059487.20357,\n", " 'background-r': -43.130456550694994,\n", " 'spectrum': array([108808.06931201, 107956.87904715, 107105.70551897, ...,\n", " 2137.48357259, 2140.30517608, 2143.14351626]),\n", " 'blurred': array([139757.55 , 139617.84 , 139350.38 , ..., 658.92535,\n", " 628.73956, 612.56323], dtype=float32),\n", " 'mask': array([0., 0., 0., ..., 0., 0., 1.]),\n", " 'fit_parameter': array([ 4.44500595e+10, -4.31304566e+01, -4.44500239e+10, -1.32738050e+02,\n", " 1.21798489e-01, 1.08102056e+12, 2.93671332e+12]),\n", " 'fit_area_start': 150.0,\n", " 'fit_area_end': 611.75},\n", " 'use_low_loss': False,\n", " 'fit_area': {'fit_start': 150.0, 'fit_end': 611.75},\n", " '0': {'z': 5,\n", " 'symmetry': 'K1',\n", " 'element': 'B',\n", " 'onset': 188.0,\n", " 'end_exclude': 238.0,\n", " 'start_exclude': 183.0,\n", " 'all_edges': {'K1': {'onset': 188.0}},\n", " 'chemical_shift': 0.0,\n", " 'areal_density': 1081020558242.3635,\n", " 'original_onset': 188.0,\n", " 'data': array([6.65067724e-09, 6.58530109e-09, 6.51992495e-09, ...,\n", " 1.69707960e-10, 1.69447463e-10, 1.69186967e-10]),\n", " 'X_section_type': 'XRPA',\n", " 'X_section_source': 'pyTEMlib'},\n", " '1': {'z': 7,\n", " 'symmetry': 'K1',\n", " 'element': 'N',\n", " 'onset': 401.6,\n", " 'end_exclude': 451.6,\n", " 'start_exclude': 386.6,\n", " 'all_edges': {'K1': {'onset': 401.6}},\n", " 'chemical_shift': 0.0,\n", " 'areal_density': 2936713317469.3164,\n", " 'original_onset': 401.6,\n", " 'data': array([2.64344212e-08, 2.61784122e-08, 2.59224032e-08, ...,\n", " 5.65933272e-10, 5.65105461e-10, 5.64277650e-10]),\n", " 'X_section_type': 'XRPA',\n", " 'X_section_source': 'pyTEMlib'}}" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "edges" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.716611904444078" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2936713317469/ 1081020558242\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "tags": [] }, "outputs": [], "source": [ "B_areal_density = edges['0']['areal_density'] /main_dataset.metadata['experiment']['flux_ppm']*1e-6\n", "N_areal_density = edges['1']['areal_density'] /main_dataset.metadata['experiment']['flux_ppm']*1e-6\n", "\n", "#the B atom areal density of a single layer of h-BN (18.2 nm−2) \n", "print(f\" B areal density is {B_areal_density:.0f} atoms per square nm, which equates {abs(B_areal_density)/18.2:.1f} atomic layers\")\n", "print(f\" N areal density is {N_areal_density:.0f} atoms per square nm, which equates {abs(N_areal_density)/18.2:.1f} atomic layers\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Log Data\n", "We write all the data to the hdf5 file associated with our dataset.\n", "\n", "In our case that is only the ``metadata``, in which we stored the ``experimental parameters`` and the ``fitting parameters and result``." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "main_dataset.view_metadata()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ELNES\n", "The electron energy-loss near edge structure is determined by fititng the spectrum after quantification model subtraction. \n", "\n", "First smooth the spectrum (2 iterations are ususally sufficient) and then \n", "find the number of peaks you want (Can be repeated as oftern as one wants).\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def smooth(dataset, iterations, advanced_present):\n", " \"\"\"Gaussian mixture model (non-Bayesian)\n", "\n", " Fit lots of Gaussian to spectrum and let the program sort it out\n", " We sort the peaks by area under the Gaussians, assuming that small areas mean noise.\n", "\n", " \"\"\"\n", "\n", " # TODO: add sensitivity to dialog and the two functions below\n", " peaks = dataset.metadata['peak_fit']\n", "\n", " if advanced_present and iterations > 1:\n", " peak_model, peak_out_list = advanced_eels_tools.smooth(dataset, peaks['fit_start'],\n", " peaks['fit_end'], iterations=iterations)\n", " else:\n", " peak_model, peak_out_list = eels.find_peaks(dataset, peaks['fit_start'], peaks['fit_end'])\n", " peak_out_list = [peak_out_list]\n", "\n", " flat_list = [item for sublist in peak_out_list for item in sublist]\n", " new_list = np.reshape(flat_list, [len(flat_list) // 3, 3])\n", " area = np.sqrt(2 * np.pi) * np.abs(new_list[:, 1]) * np.abs(new_list[:, 2] / np.sqrt(2 * np.log(2)))\n", " arg_list = np.argsort(area)[::-1]\n", " area = area[arg_list]\n", " peak_out_list = new_list[arg_list]\n", "\n", " number_of_peaks = np.searchsorted(area * -1, -np.average(area))\n", "\n", " return peak_model, peak_out_list, number_of_peaks" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import ipywidgets\n", "import matplotlib\n", "import sidpy\n", "import matplotlib.patches as patches\n", "def get_sidebar():\n", " side_bar = ipywidgets.GridspecLayout(16, 3, width='auto', grid_gap=\"0px\")\n", " row = 0\n", " side_bar[row, :3] = ipywidgets.Button(description='Fit Area',\n", " layout=ipywidgets.Layout(width='auto', grid_area='header'),\n", " style=ipywidgets.ButtonStyle(button_color='lightblue'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=7.5,description='Fit Start:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"eV\", layout=ipywidgets.Layout(width='20px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Fit End:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"eV\", layout=ipywidgets.Layout(width='20px'))\n", " \n", " row += 1\n", " side_bar[row, :3] = ipywidgets.Button(description='Peak Finding',\n", " layout=ipywidgets.Layout(width='auto', grid_area='header'),\n", " style=ipywidgets.ButtonStyle(button_color='lightblue'))\n", "\n", " row += 1\n", " \n", " \n", " side_bar[row, :2] = ipywidgets.Dropdown(\n", " options=[('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)],\n", " value=0,\n", " description='Peaks:',\n", " disabled=False,\n", " layout=ipywidgets.Layout(width='200px'))\n", " \n", " side_bar[row, 2] = ipywidgets.Button(\n", " description='Smooth',\n", " disabled=False,\n", " button_style='', # 'success', 'info', 'warning', 'danger' or ''\n", " tooltip='Do Gaussian Mixing',\n", " layout=ipywidgets.Layout(width='100px'))\n", " \n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Number:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.Button(\n", " description='Find',\n", " disabled=False,\n", " button_style='', # 'success', 'info', 'warning', 'danger' or ''\n", " tooltip='Find first peaks from Gaussian mixture',\n", " layout=ipywidgets.Layout(width='100px'))\n", " \n", " row += 1\n", " \n", " side_bar[row, :3] = ipywidgets.Button(description='Peaks',\n", " layout=ipywidgets.Layout(width='auto', grid_area='header'),\n", " style=ipywidgets.ButtonStyle(button_color='lightblue'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.Dropdown(\n", " options=[('Peak 1', 0), ('Add Peak', -1)],\n", " value=0,\n", " description='Peaks:',\n", " disabled=False,\n", " layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"\", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.Dropdown(\n", " options=[ 'Gauss', 'Lorentzian', 'Drude', 'Zero-Loss'],\n", " value='Gauss',\n", " description='Symmetry:',\n", " disabled=False,\n", " layout=ipywidgets.Layout(width='200px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Position:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"eV\", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Amplitude:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"eV\", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Width FWHM:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"eV\", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.FloatText(value=0.1, description='Asymmetry:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\"a.u.\", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " \n", " side_bar[row, :3] = ipywidgets.Button(description='Analysis',\n", " layout=ipywidgets.Layout(width='auto', grid_area='header'),\n", " style=ipywidgets.ButtonStyle(button_color='lightblue'))\n", " \n", " row += 1\n", " side_bar[row, :2] = ipywidgets.Dropdown(\n", " options=[('None', 0)],\n", " value=0,\n", " description='White-Line Ratio:',\n", " disabled=False,\n", " layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\" \", layout=ipywidgets.Layout(width='100px'))\n", " row += 1\n", " side_bar[row, :2] = ipywidgets.Dropdown(\n", " options=[('None', 0)],\n", " value=0,\n", " description='White-Line Sum:',\n", " disabled=False,\n", " layout=ipywidgets.Layout(width='200px'))\n", " side_bar[row, 2] = ipywidgets.widgets.Label(value=\" \", layout=ipywidgets.Layout(width='100px'))\n", " return side_bar\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'ieels' is not defined", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[1], line 436\u001b[0m\n\u001b[0;32m 428\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[0;32m 429\u001b[0m \u001b[38;5;66;03m#self.sidebar[11,0].on_click(self.do_fit)\u001b[39;00m\n\u001b[0;32m 430\u001b[0m \u001b[38;5;66;03m#self.sidebar[12,2].observe(self.plot)\u001b[39;00m\n\u001b[0;32m 431\u001b[0m \u001b[38;5;66;03m#self.sidebar[4,2].observe(self.plot)\u001b[39;00m\n\u001b[0;32m 432\u001b[0m \n\u001b[0;32m 433\u001b[0m \u001b[38;5;66;03m#self.sidebar[12,0].observe(self.set_y_scale)\u001b[39;00m\n\u001b[1;32m--> 436\u001b[0m \u001b[43mieels\u001b[49m\u001b[38;5;241m.\u001b[39mQt_available \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \n\u001b[0;32m 437\u001b[0m view \u001b[38;5;241m=\u001b[39m ieels\u001b[38;5;241m.\u001b[39mPeakfITWidget(file_widget\u001b[38;5;241m.\u001b[39mdatasets)\n", "\u001b[1;31mNameError\u001b[0m: name 'ieels' is not defined" ] } ], "source": [ "class PeakFitWidget(object):\n", " def __init__(self, datasets=None):\n", " self.datasets = datasets\n", " if not isinstance(datasets, dict):\n", " raise TypeError('dataset or first item inhas to be a sidpy dataset')\n", " \n", " self.sidebar = get_sidebar()\n", " self.key = list(self.datasets)[0]\n", " self.dataset = datasets[self.key]\n", " if not isinstance(self.dataset, sidpy.Dataset):\n", " raise TypeError('dataset or first item inhas to be a sidpy dataset')\n", " self.spec_dim = ft.get_dimensions_by_type('spectral', self.dataset)\n", " if len(self.spec_dim) != 1:\n", " raise TypeError('We need exactly one SPECTRAL dimension')\n", " self.spec_dim = self.spec_dim[0]\n", " #self.energy_scale = self.dataset._axes[self.spec_dim]\n", " \n", " self.energy_scale = self.spec_dim[1]\n", " \n", "\n", " self.model = np.array([])\n", " self.y_scale = 1.0\n", " self.change_y_scale = 1.0\n", " self.spectrum_ll = None\n", " self.low_loss_key = None\n", "\n", " self.peaks = {}\n", "\n", " self.show_regions = False\n", " \n", " with plt.ioff():\n", " self.fig = plt.figure()\n", " self.fig.canvas.toolbar_position = 'right'\n", " self.fig.canvas.toolbar_visible = True\n", " #self.set_dataset()\n", " self.set_action()\n", " self.y_scale = 1.0\n", " self.change_y_scale = 1.0\n", " self.plot(scale=False)\n", " \n", " if 'peak_fit' not in self.dataset.metadata:\n", " self.dataset.metadata['peak_fit'] = {}\n", " if 'edges' in self.dataset.metadata:\n", " if 'fit_area' in self.dataset.metadata['edges']:\n", " self.dataset.metadata['peak_fit']['fit_start'] = \\\n", " self.dataset.metadata['edges']['fit_area']['fit_start']\n", " self.dataset.metadata['peak_fit']['fit_end'] = self.dataset.metadata['edges']['fit_area']['fit_end']\n", " self.dataset.metadata['peak_fit']['peaks'] = {'0': {'position': self.energy_scale[1],\n", " 'amplitude': 1000.0, 'width': 1.0,\n", " 'type': 'Gauss', 'asymmetry': 0}}\n", "\n", "\n", " self.peaks = self.dataset.metadata['peak_fit']\n", " if 'fit_start' not in self.peaks:\n", " self.peaks['fit_start'].value = self.energy_scale[1]\n", " self.peaks['fit_end'].value = self.energy_scale[-2]\n", "\n", " if 'peak_model' in self.peaks:\n", " self.peak_model = self.peaks['peak_model']\n", " self.model = self.peak_model\n", " if 'edge_model' in self.peaks:\n", " self.model = self.model + self.peaks['edge_model']\n", " else:\n", " self.model = np.array([])\n", " self.peak_model = np.array([])\n", " if 'peak_out_list' in self.peaks:\n", " self.peak_out_list = self.peaks['peak_out_list']\n", " self.set_peak_list()\n", "\n", " # check whether a core loss analysis has been done previously\n", " if not hasattr(self, 'core_loss') and 'edges' in self.dataset.metadata:\n", " self.core_loss = True\n", " else:\n", " self.core_loss = False\n", "\n", " self.update()\n", "\n", " self.selector = matplotlib.widgets.SpanSelector(self.fig.gca(), self.line_select_callback,\n", " direction=\"horizontal\",\n", " interactive=True,\n", " props=dict(facecolor='blue', alpha=0.2))\n", " self.start_cursor = ipywidgets.FloatText(value=0, description='Start:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " self.end_cursor = ipywidgets.FloatText(value=0, description='End:', disabled=False, color='black', layout=ipywidgets.Layout(width='200px'))\n", " self.panel = ipywidgets.VBox([ipywidgets.HBox([ipywidgets.Label('',layout=ipywidgets.Layout(width='100px')), ipywidgets.Label('Cursor:'),\n", " self.start_cursor,ipywidgets.Label('eV'), \n", " self.end_cursor, ipywidgets.Label('eV')]),\n", " self.fig.canvas])\n", " \n", " self.app_layout = ipywidgets.AppLayout(\n", " left_sidebar=self.sidebar,\n", " center=self.panel,\n", " footer=None,#message_bar,\n", " pane_heights=[0, 10, 0],\n", " pane_widths=[4, 10, 0],\n", " )\n", " display(self.app_layout)\n", " \n", " def line_select_callback(self, x_min, x_max):\n", " self.start_cursor.value = np.round(x_min,3)\n", " self.end_cursor.value = np.round(x_max, 3)\n", " self.start_channel = np.searchsorted(self.datasets[self.key].energy_loss, self.start_cursor.value)\n", " self.end_channel = np.searchsorted(self.datasets[self.key].energy_loss, self.end_cursor.value)\n", " \n", " \n", " def set_peak_list(self):\n", " self.peak_list = []\n", " if 'peaks' not in self.peaks:\n", " self.peaks['peaks'] = {}\n", " key = 0\n", " for key in self.peaks['peaks']:\n", " if key.isdigit():\n", " self.peak_list.append((f'Peak {int(key) + 1}', int(key)))\n", " self.peak_list.append((f'add peak', -1))\n", " self.sidebar[7, 0].options = self.peak_list\n", " self.sidebar[7, 0].value = 0\n", "\n", "\n", " def plot(self, scale=True):\n", " \n", " ylim = self.fig.gca().get_ylim()\n", " \n", " ax = self.fig.gca()\n", " ax.clear()\n", " ax.plot(self.energy_scale, self.datasets[self.key]*self.y_scale, label=self.datasets[self.key].title)\n", " ax.set_xlabel(self.datasets[self.key].labels[0])\n", " ax.set_ylabel(self.datasets[self.key].data_descriptor)\n", " ax.ticklabel_format(style='sci', scilimits=(-2, 3))\n", " if scale:\n", " ax.set_ylim(np.array(ylim)*self.change_y_scale)\n", " self.change_y_scale = 1.0\n", " if self.y_scale != 1.:\n", " ax.set_ylabel('scattering probability (ppm/eV)')\n", " self.selector = matplotlib.widgets.SpanSelector(self.fig.gca(), self.line_select_callback,\n", " direction=\"horizontal\",\n", " interactive=True,\n", " props=dict(facecolor='blue', alpha=0.2))\n", " \n", " if len(self.model) > 1:\n", " ax.plot(self.energy_scale, self.model*self.y_scale, label='model')\n", " difference_spec = self.datasets[self.key] - self.model\n", " ax.plot(self.energy_scale, difference_spec*self.y_scale, label='difference')\n", " # axis.plot(self.energy_scale, (self.datasets[key] - self.model) / np.sqrt(self.datasets[key])*self.y_scale, label='Poisson')\n", " \n", " if 'peaks' in self.peaks:\n", " for index, peak in self.peaks['peaks'].items():\n", " p = [peak['position'], peak['amplitude'], peak['width']]\n", " ax.plot(self.energy_scale, eels.gauss(self.energy_scale, p))\n", " \n", " ax.legend()\n", " \n", " \n", " \n", " def set_dataset(self, index=0): \n", " if 'edges' not in self.dataset.metadata or self.dataset.metadata['edges'] == {}:\n", " self.dataset.metadata['edges'] = {'0': {}, 'model': {}, 'use_low_loss': False}\n", " \n", " self.edges = self.dataset.metadata['edges']\n", " if '0' not in self.edges:\n", " self.edges['0'] = {}\n", " \n", " if 'fit_area' not in self.edges:\n", " self.edges['fit_area'] = {}\n", " if 'fit_start' not in self.edges['fit_area']:\n", " self.sidebar[1,0].value = np.round(self.energy_scale[50], 3)\n", " self.edges['fit_area']['fit_start'] = self.sidebar[1,0].value \n", " else:\n", " self.sidebar[1,0].value = np.round(self.edges['fit_area']['fit_start'],3)\n", " if 'fit_end' not in self.edges['fit_area']:\n", " self.sidebar[2,0].value = np.round(self.energy_scale[-2], 3)\n", " self.edges['fit_area']['fit_end'] = self.sidebar[2,0].value \n", " else:\n", " self.sidebar[2,0].value = np.round(self.edges['fit_area']['fit_end'],3)\n", " \n", " if self.dataset.data_type.name == 'SPECTRAL_IMAGE':\n", " if 'SI_bin_x' not in self.dataset.metadata['experiment']:\n", " self.dataset.metadata['experiment']['SI_bin_x'] = 1\n", " self.dataset.metadata['experiment']['SI_bin_y'] = 1\n", "\n", " bin_x = self.dataset.metadata['experiment']['SI_bin_x']\n", " bin_y = self.dataset.metadata['experiment']['SI_bin_y']\n", " # self.dataset.view.set_bin([bin_x, bin_y])\n", " self.update()\n", " \n", " def set_fit_area(self, value):\n", " \"\"\"\n", " if self.sidebar[1,0].value > self.sidebar[2,0].value:\n", " self.sidebar[1,0].value = self.sidebar[2,0].value - 1.0\n", " if float(self.sidebar[1,0].value) < self.energy_scale[0]:\n", " self.sidebar[1,0].value = self.energy_scale[0]\n", " if self.sidebar[2,0].value > self.energy_scale[-1]:\n", " self.sidebar[2,0].value = self.energy_scale[-1]\n", " \"\"\"\n", " self.peaks['fit_start'] = self.sidebar[1, 0].value \n", " self.peaks['fit_end'] = self.sidebar[2, 0].value \n", " \n", " self.plot()\n", " \n", " def set_y_scale(self, value): \n", " self.change_y_scale = 1/self.y_scale\n", " if self.sidebar[12, 0].value:\n", " dispersion = self.energy_scale[1] - self.energy_scale[0]\n", " self.y_scale = 1/self.dataset.metadata['experiment']['flux_ppm'] * dispersion\n", " else:\n", " self.y_scale = 1.0\n", " \n", " self.change_y_scale *= self.y_scale\n", " self.update()\n", " self.plot()\n", " \n", " def update(self, index=0):\n", " \n", " # self.setWindowTitle('update')\n", " self.sidebar[1, 0].value = self.peaks['fit_start']\n", " self.sidebar[2, 0].value = self.peaks['fit_end']\n", "\n", " peak_index = self.sidebar[7, 0].value\n", " self.peak_index = self.sidebar[7, 0].value\n", " if str(peak_index) not in self.peaks['peaks']:\n", " self.peaks['peaks'][str(peak_index)] = {'position': self.energy_scale[1], 'amplitude': 1000.0,\n", " 'width': 1.0, 'type': 'Gauss', 'asymmetry': 0}\n", " self.sidebar[8, 0].value = self.peaks['peaks'][str(peak_index)]['type']\n", " if 'associated_edge' in self.peaks['peaks'][str(peak_index)]:\n", " self.sidebar[7, 2].value = (self.peaks['peaks'][str(peak_index)]['associated_edge'])\n", " else:\n", " self.sidebar[7, 2].value = ''\n", " self.sidebar[9, 0].value = self.peaks['peaks'][str(peak_index)]['position']\n", " self.sidebar[10, 0].value = self.peaks['peaks'][str(peak_index)]['amplitude']\n", " self.sidebar[11, 0].value = self.peaks['peaks'][str(peak_index)]['width']\n", " if 'asymmetry' not in self.peaks['peaks'][str(peak_index)]:\n", " self.peaks['peaks'][str(peak_index)]['asymmetry'] = 0.\n", " self.sidebar[12, 0].value = self.peaks['peaks'][str(peak_index)]['asymmetry']\n", "\n", " \n", " def do_fit(self, value=0):\n", " if 'experiment' in self.dataset.metadata:\n", " exp = self.dataset.metadata['experiment']\n", " if 'convergence_angle' not in exp:\n", " raise ValueError('need a convergence_angle in experiment of metadata dictionary ')\n", " alpha = exp['convergence_angle']\n", " beta = exp['collection_angle']\n", " beam_kv = exp['acceleration_voltage']\n", "\n", " else:\n", " raise ValueError('need a experiment parameter in metadata dictionary')\n", " \n", " eff_beta = eels.effective_collection_angle(self.energy_scale, alpha, beta, beam_kv)\n", "\n", " if self.edges['use_low_loss']:\n", " low_loss = self.spectrum_ll / self.spectrum_ll.sum()\n", " else:\n", " low_loss = None\n", " edges = eels.make_cross_sections(self.edges, np.array(self.energy_scale), beam_kv, eff_beta, low_loss)\n", "\n", " if self.dataset.data_type == sidpy.DataType.SPECTRAL_IMAGE:\n", " spectrum = self.dataset.view.get_spectrum()\n", " else:\n", " spectrum = self.dataset\n", " self.edges = eels.fit_edges2(spectrum, self.energy_scale, edges)\n", " areal_density = []\n", " elements = []\n", " for key in edges:\n", " if key.isdigit(): # only edges have numbers in that dictionary\n", " elements.append(edges[key]['element'])\n", " areal_density.append(edges[key]['areal_density'])\n", " areal_density = np.array(areal_density)\n", " out_string = '\\nRelative composition: \\n'\n", " for i, element in enumerate(elements):\n", " out_string += f'{element}: {areal_density[i] / areal_density.sum() * 100:.1f}% '\n", "\n", " self.model = self.edges['model']['spectrum']\n", " self.update()\n", " self.plot()\n", " \n", " def find_associated_edges(self):\n", " onsets = []\n", " edges = []\n", " if 'edges' in self.dataset.metadata:\n", " for key, edge in self.dataset.metadata['edges'].items():\n", " if key.isdigit():\n", " element = edge['element']\n", " for sym in edge['all_edges']: # TODO: Could be replaced with exclude\n", " onsets.append(edge['all_edges'][sym]['onset'] + edge['chemical_shift'])\n", " # if 'sym' == edge['symmetry']:\n", " edges.append([key, f\"{element}-{sym}\", onsets[-1]])\n", " for key, peak in self.peaks['peaks'].items():\n", " if key.isdigit():\n", " distance = self.energy_scale[-1]\n", " index = -1\n", " for ii, onset in enumerate(onsets):\n", " if onset < peak['position'] < onset+50:\n", " if distance > np.abs(peak['position'] - onset):\n", " distance = np.abs(peak['position'] - onset) # TODO: check whether absolute is good\n", " distance_onset = peak['position'] - onset\n", " index = ii\n", " if index >= 0:\n", " peak['associated_edge'] = edges[index][1] # check if more info is necessary\n", " peak['distance_to_onset'] = distance_onset\n", "\n", " def find_white_lines(self):\n", " if 'edges' in self.dataset.metadata:\n", " white_lines = {}\n", " for index, peak in self.peaks['peaks'].items():\n", " if index.isdigit():\n", " if 'associated_edge' in peak:\n", " if peak['associated_edge'][-2:] in ['L3', 'L2', 'M5', 'M4']:\n", " if peak['distance_to_onset'] < 10:\n", " area = np.sqrt(2 * np.pi) * peak['amplitude'] * np.abs(peak['width']/np.sqrt(2 * np.log(2)))\n", " if peak['associated_edge'] not in white_lines:\n", " white_lines[peak['associated_edge']] = 0.\n", " if area > 0:\n", " white_lines[peak['associated_edge']] += area # TODO: only positive ones?\n", " white_line_ratios = {}\n", " white_line_sum = {}\n", " for sym, area in white_lines.items():\n", " if sym[-2:] in ['L2', 'M4', 'M2']:\n", " if area > 0 and f\"{sym[:-1]}{int(sym[-1]) + 1}\" in white_lines:\n", " if white_lines[f\"{sym[:-1]}{int(sym[-1]) + 1}\"] > 0:\n", " white_line_ratios[f\"{sym}/{sym[-2]}{int(sym[-1]) + 1}\"] = area / white_lines[\n", " f\"{sym[:-1]}{int(sym[-1]) + 1}\"]\n", " white_line_sum[f\"{sym}+{sym[-2]}{int(sym[-1]) + 1}\"] = (\n", " area + white_lines[f\"{sym[:-1]}{int(sym[-1]) + 1}\"])\n", "\n", " areal_density = 1.\n", " if 'edges' in self.dataset.metadata:\n", " for key, edge in self.dataset.metadata['edges'].items():\n", " if key.isdigit():\n", " if edge['element'] == sym.split('-')[0]:\n", " areal_density = edge['areal_density']\n", " break\n", " white_line_sum[f\"{sym}+{sym[-2]}{int(sym[-1]) + 1}\"] /= areal_density\n", "\n", " self.peaks['white_lines'] = white_lines\n", " self.peaks['white_line_ratios'] = white_line_ratios\n", " self.peaks['white_line_sums'] = white_line_sum\n", " self.wl_list = []\n", " self.wls_list = []\n", " if len(self.peaks['white_line_ratios']) > 0:\n", " for key in self.peaks['white_line_ratios']:\n", " self.wl_list.append(key)\n", " for key in self.peaks['white_line_sums']:\n", " self.wls_list.append(key)\n", "\n", " self.sidebar[14, 0].options = self.wl_list\n", " self.sidebar[14, 0].value = 0\n", " self.sidebar[14, 0].value = f\"{self.peaks['white_line_ratios'][self.wl_list[0]]:.2f}\"\n", " \n", " self.sidebar[15, 0].options = self.wls_list\n", " self.sidebar[15, 0].value = 0\n", " self.sidebar[15, 0].value = f\"{self.peaks['white_line_sums'][self.wls_list[0]]*1e6:.4f} ppm\"\n", "\n", " else:\n", " self.wl_list.append('Ratio')\n", " self.wls_list.append('Sum')\n", "\n", " sself.sidebar[14, 0].options = self.wl_list\n", " self.sidebar[14, 0].value = 0\n", " self.sidebar[14, 0].value = ' '\n", " \n", " self.sidebar[15, 0].options = self.wls_list\n", " self.sidebar[15, 0].value = 0\n", " self.sidebar[15, 0].value = ' '\n", "\n", " def find_peaks(self, value=0):\n", " number_of_peaks = int(self.sidebar[5, 0].value)\n", "\n", " # is now sorted in smooth function\n", " # flat_list = [item for sublist in self.peak_out_list for item in sublist]\n", " # new_list = np.reshape(flat_list, [len(flat_list) // 3, 3])\n", " # arg_list = np.argsort(np.abs(new_list[:, 1]))\n", "\n", " self.peak_list = []\n", " self.peaks['peaks'] = {}\n", " for i in range(number_of_peaks):\n", " self.peak_list.append((f'Peak {i+1}', i))\n", " p = self.peak_out_list[i]\n", " self.peaks['peaks'][str(i)] = {'position': p[0], 'amplitude': p[1], 'width': p[2], 'type': 'Gauss',\n", " 'asymmetry': 0}\n", "\n", " self.peak_list.append((f'add peak', -1))\n", " \n", " self.sidebar[7, 0].options = self.peak_list\n", " self.sidebar[7, 0].value = 0\n", " self.find_associated_edges()\n", " self.find_white_lines()\n", "\n", " self.update()\n", " self.plot()\n", "\n", " \n", " def smooth(self, value=0):\n", " \"\"\"Fit lots of Gaussian to spectrum and let the program sort it out\n", "\n", " We sort the peaks by area under the Gaussians, assuming that small areas mean noise.\n", "\n", " \"\"\"\n", " iterations = self.sidebar[4, 0].value\n", " self.sidebar[5, 0].value = 0\n", " advanced_present=False\n", "\n", " self.peak_model, self.peak_out_list, number_of_peaks = smooth(self.dataset, iterations, advanced_present)\n", "\n", " spec_dim = ft.get_dimensions_by_type('SPECTRAL', self.dataset)[0]\n", " if spec_dim[1][0] > 0:\n", " self.model = self.dataset.metadata['edges']['model']['spectrum']\n", " elif 'model' in self.dataset.metadata:\n", " self.model = self.dataset.metadata['model']\n", " else:\n", " self.model = np.zeros(len(spec_dim[1]))\n", "\n", " self.sidebar[5, 0].value = number_of_peaks\n", "\n", " self.dataset.metadata['peak_fit']['edge_model'] = self.model\n", " self.model = self.model + self.peak_model\n", " self.dataset.metadata['peak_fit']['peak_model'] = self.peak_model\n", " self.dataset.metadata['peak_fit']['peak_out_list'] = self.peak_out_list\n", "\n", " self.update()\n", " self.plot()\n", " \n", " \n", " def set_action(self):\n", " self.sidebar[1, 0].observe(self.set_fit_area, names='value')\n", " self.sidebar[2, 0].observe(self.set_fit_area, names='value')\n", " \n", " self.sidebar[4, 2].on_click(self.smooth)\n", " self.sidebar[7,0].observe(self.update)\n", " self.sidebar[5,2].on_click(self.find_peaks)\n", " pass\n", " #self.sidebar[11,0].on_click(self.do_fit)\n", " #self.sidebar[12,2].observe(self.plot)\n", " #self.sidebar[4,2].observe(self.plot)\n", "\n", " #self.sidebar[12,0].observe(self.set_y_scale)\n", " \n", "\n", "ieels.Qt_available = False \n", "view = ieels.PeakfITWidget(file_widget.datasets)" ] }, { "cell_type": "code", "execution_count": 221, "metadata": {}, "outputs": [], "source": [ "view.update()" ] }, { "cell_type": "code", "execution_count": 226, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2, 196.39897203557885)" ] }, "execution_count": 226, "metadata": {}, "output_type": "execute_result" } ], "source": [ "view.sidebar[9, 0].value, view.peaks['peaks'][str(view.peak_index)]['position']\n", "view.peak_index, view.peaks['peaks'][str(3)]['position']" ] }, { "cell_type": "code", "execution_count": 229, "metadata": {}, "outputs": [], "source": [ "view.find_peaks()" ] }, { "cell_type": "code", "execution_count": 230, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'0': {'position': 205.29198729248733,\n", " 'amplitude': -164537.92738566975,\n", " 'width': 16.489991004528846,\n", " 'type': 'Gaussian',\n", " 'asymmetry': 0},\n", " '1': {'position': 209.51854898890775,\n", " 'amplitude': 128179.22805573599,\n", " 'width': 11.327214665710333,\n", " 'type': 'Gaussian',\n", " 'asymmetry': 0},\n", " '2': {'position': 201.89290094322763,\n", " 'amplitude': 125596.26392103347,\n", " 'width': 9.143299311315088,\n", " 'type': 'Gaussian',\n", " 'asymmetry': 0},\n", " '3': {'position': 196.39897203557885,\n", " 'amplitude': 66282.27401083642,\n", " 'width': 3.2456895770650784,\n", " 'type': 'Gaussian',\n", " 'asymmetry': 0}}" ] }, "execution_count": 230, "metadata": {}, "output_type": "execute_result" } ], "source": [ "view.peaks['peaks']" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(600.0, 100.0)" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "view.sidebar[2,0].value, view.energy_scale[0]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'PeakWidget' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn [10], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m peak_dialog \u001b[38;5;241m=\u001b[39m \u001b[43mPeakWidget\u001b[49m(main_dataset)\n", "\u001b[0;31mNameError\u001b[0m: name 'PeakWidget' is not defined" ] } ], "source": [ "peak_dialog = PeakWidget(main_dataset)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "759d2e3aef344945926bdb56a17a38c8", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABpQ0lEQVR4nO3deVhU5eIH8O/MMAyLMIIIOIpbmqm4heZa2k3RcsnqZoVR/vJqXVMztczuraxu0mK22Wrd9qTuNbuWRqiZRooaSoq7uYAs4gLDIswMM+/vD+QwZ2YQkIHZvp/n4XnmnPPOzDtHdL6+q0IIIUBEREREPkPp6goQERERUctiACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDIBEREZGPYQAkIiIi8jEMgEREREQ+hgGQiIiIyMcwABIRERH5GAZAIiIiIh/DAEhERETkYxgAiYiIiHwMAyARERGRj2EAJCIiIvIxDIBEREREPoYBkIiIiMjHMAASERER+RgGQCIiIiIfwwBIRERE5GMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDIBEREZGPYQAkIiIi8jEMgEREREQ+hgGQiIiIyMcwABIRERH5GAZAIiIiIh/DAEhERETkYxgAiYiIiHwMAyARERGRj2EAJCIiIvIxDIBEREREPoYBkIiIiMjHMAASERER+RgGQCIiIiIfwwBIRERE5GMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfIyfqyvgySwWC/Ly8hASEgKFQuHq6hAREVEDCCFQWloKnU4HpdI328IYAJsgLy8PMTExrq4GERERXYGcnBx06NDB1dVwCQbAJggJCQFQ/QsUGhrq4toQERFRQ5SUlCAmJkb6HvdFDIBNUNPtGxoaygBIRETkYXx5+JZvdnwTERER+TAGQCIiIiIfwwBIRERE5GMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDoBuqMluw7KfD2P7neVdXhYiIiLwQA6AbSt6VgxWbj+GelemurgoRERF5IQZAN3T0TKmrq0BERERejAHQDVVZhKurQERERF6MAdANmRkAiYiIqBkxALohhUIhPbYwDBIREZGTMQC6oX+O7yk9rqwyu7AmRERE5I0YAN2Qxq/2j8VYZXFhTYiIiMgbOTUAbt26FRMnToROp4NCocB3331XZ9kHH3wQCoUCr7/+uuy8wWDAnDlzEBERgeDgYEyaNAmnT5+WlSkqKkJiYiK0Wi20Wi0SExNRXFwsK5OdnY2JEyciODgYERERmDt3LoxGo6zMvn37MHLkSAQGBqJ9+/Z47rnnIITru1z9VEr4Kau7gQ0MgERERORkTg2A5eXl6NevH1asWHHZct999x127NgBnU5nd23evHlYs2YNkpOTkZaWhrKyMkyYMAFmc21XaEJCAjIzM5GSkoKUlBRkZmYiMTFRum42mzF+/HiUl5cjLS0NycnJWL16NRYsWCCVKSkpwZgxY6DT6bBr1y689dZbWLZsGZYvX+6EO9F0Na2AlSZ2ARMREZGTiWYCQKxZs8bu/OnTp0X79u1FVlaW6NSpk3jttdeka8XFxUKtVovk5GTpXG5urlAqlSIlJUUIIcSBAwcEAJGeni6V2b59uwAgDh06JIQQYv369UKpVIrc3FypzKpVq4RGoxF6vV4IIcQ777wjtFqtqKyslMokJSUJnU4nLBZLgz6jXq8XAKTXdKYBz6WKTot+EIcLSpz+2kRERL6sOb+/PUWLjgG0WCxITEzEY489ht69e9tdz8jIgMlkQnx8vHROp9MhNjYW27ZtAwBs374dWq0WgwcPlsoMGTIEWq1WViY2NlbWwjh27FgYDAZkZGRIZUaOHAmNRiMrk5eXh5MnTzqsv8FgQElJieynudS0ABpM7AImIiIi52rRAPjSSy/Bz88Pc+fOdXi9oKAA/v7+CAsLk52PiopCQUGBVCYyMtLuuZGRkbIyUVFRsuthYWHw9/e/bJma45oytpKSkqRxh1qtFjExMfV95CsmBUDOAiYiIiIna7EAmJGRgTfeeAOffPKJbJ27hhBCyJ7j6PnOKCMuTQCpq36LFy+GXq+XfnJychr1ORpD46cCwEkgRERE5HwtFgB//fVXFBYWomPHjvDz84Ofnx9OnTqFBQsWoHPnzgCA6OhoGI1GFBUVyZ5bWFgotc5FR0fjzJkzdq9/9uxZWRnbVryioiKYTKbLliksLAQAu5bBGhqNBqGhobKf5hKgrv6j+SL9FNb+kdds70NERES+p8UCYGJiIvbu3YvMzEzpR6fT4bHHHsNPP/0EAIiLi4NarcaGDRuk5+Xn5yMrKwvDhg0DAAwdOhR6vR47d+6UyuzYsQN6vV5WJisrC/n5+VKZ1NRUaDQaxMXFSWW2bt0qWxomNTUVOp1OCqSu5H+pC/jHrALMXbWH28MRERGR0/g588XKyspw7Ngx6fjEiRPIzMxEeHg4OnbsiDZt2sjKq9VqREdHo0ePHgAArVaL6dOnY8GCBWjTpg3Cw8OxcOFC9OnTB6NHjwYA9OzZE+PGjcOMGTPw/vvvAwBmzpyJCRMmSK8THx+PXr16ITExEa+88gouXLiAhQsXYsaMGVKrXUJCAp599llMmzYNTz75JI4ePYqlS5fi6aefbnQXdXPYdVLeCmqssiDQX+Wi2hAREZE3cWoL4O+//44BAwZgwIABAID58+djwIABePrppxv8Gq+99homT56MKVOmYPjw4QgKCsL3338Plao2/Hz55Zfo06cP4uPjER8fj759++Lzzz+XrqtUKqxbtw4BAQEYPnw4pkyZgsmTJ2PZsmVSGa1Wiw0bNuD06dMYOHAgZs2ahfnz52P+/PlOuBPOxx1BiIiIyFkUQrjB1hceqqSkBFqtFnq93unjATs/sU52vPPJmxAZGuDU9yAiIvJFzfn97Sm4F7CH4GxgIiIichYGQDd1+7XtZcdGMwMgEREROQcDoJu6a6B8kWmOASQiIiJnYQB0Uxq1fMbv1A93uKgmRERE5G0YAN1UoE0AvFBurKMkERERUeMwALqpdq0545eIiIiaBwOgmwoNUMuOg7gINBERETkJA6AbuzOug/TYwuUaiYiIyEkYAN3YC7f1wet39QcAmMwMgEREROQcDIBuzN9PiRuubgsAMFsELBaGQCIiImo6BkA3p1YppMfnygwurAkRERF5CwZAN6dW1f4RPfpNpusqQkRERF6DAdDNWQfA346dd2FNiIiIyFswALo5lVJRfyEiIiKiRmAA9CDXd49wdRWIiIjICzAAeoAnb7kGgP3i0ERERERXggHQA9QEv3X78lFuqHJxbYiIiMjTMQB6AH+/2j+mb/fkurAmRERE5A0YAD2Axq92H2AuBk1ERERNxQDoAaxbAAX3BCYiIqImYgD0ALIA6MJ6EBERkXdgAPQAGlkLoAsrQkRERF6BAdADWLcAEhERETUVk4UHUClqdwNhAyARERE1FQOgB1BaB0D2ARMREVETMQB6AAW3AyYiIiInYgD0AAFqq3UA2QJIRERETcQA6AGuahssPTaZGQCJiIioaRgAPYBCoUDikE4AAEOVxcW1ISIiIk/HAOgh1KrqPyqTmQGQiIiImoYB0EPUrAWYc+Gii2tCREREno4B0EP8ebYMAPDD3nwX14SIiIg8HQOgh8g4VeTqKhAREZGXYAD0EGpV7WKAHAdIRERETcEA6CESruskPS66aHRhTYiIiMjTOTUAbt26FRMnToROp4NCocB3330nXTOZTFi0aBH69OmD4OBg6HQ63HfffcjLy5O9hsFgwJw5cxAREYHg4GBMmjQJp0+flpUpKipCYmIitFottFotEhMTUVxcLCuTnZ2NiRMnIjg4GBEREZg7dy6MRnlw2rdvH0aOHInAwEC0b98ezz33nNtutfb3UVdJj4vKTS6sCREREXk6pwbA8vJy9OvXDytWrLC7dvHiRezevRtPPfUUdu/ejW+//RZHjhzBpEmTZOXmzZuHNWvWIDk5GWlpaSgrK8OECRNgNpulMgkJCcjMzERKSgpSUlKQmZmJxMRE6brZbMb48eNRXl6OtLQ0JCcnY/Xq1ViwYIFUpqSkBGPGjIFOp8OuXbvw1ltvYdmyZVi+fLkzb4nT+Psp0fXSgtAXytkCSERERE0gmgkAsWbNmsuW2blzpwAgTp06JYQQori4WKjVapGcnCyVyc3NFUqlUqSkpAghhDhw4IAAINLT06Uy27dvFwDEoUOHhBBCrF+/XiiVSpGbmyuVWbVqldBoNEKv1wshhHjnnXeEVqsVlZWVUpmkpCSh0+mExWJp0GfU6/UCgPSaze2Od34TnRb9INbvzWuR9yMiIvJGLf397Y5cOgZQr9dDoVCgdevWAICMjAyYTCbEx8dLZXQ6HWJjY7Ft2zYAwPbt26HVajF48GCpzJAhQ6DVamVlYmNjodPppDJjx46FwWBARkaGVGbkyJHQaDSyMnl5eTh58qTD+hoMBpSUlMh+WlJYsD8A4ALHABIREVETuCwAVlZW4oknnkBCQgJCQ0MBAAUFBfD390dYWJisbFRUFAoKCqQykZGRdq8XGRkpKxMVFSW7HhYWBn9//8uWqTmuKWMrKSlJGneo1WoRExPT2I/dJOFB1QGwiF3ARERE1AQuCYAmkwl33303LBYL3nnnnXrLCyGgUNQug2L92JllxKUJII6eCwCLFy+GXq+XfnJycuqtuzOFBvoBAEoqq1r0fYmIiMi7tHgANJlMmDJlCk6cOIENGzZIrX8AEB0dDaPRiKIi+aLHhYWFUutcdHQ0zpw5Y/e6Z8+elZWxbcUrKiqCyWS6bJnCwkIAsGsZrKHRaBAaGir7aUk128F9sPU4J4IQERHRFWvRAFgT/o4ePYqNGzeiTZs2sutxcXFQq9XYsGGDdC4/Px9ZWVkYNmwYAGDo0KHQ6/XYuXOnVGbHjh3Q6/WyMllZWcjPr902LTU1FRqNBnFxcVKZrVu3ypaGSU1NhU6nQ+fOnZ3+2Z3BT1n7x/XJbydcWBMiIiLyZE4NgGVlZcjMzERmZiYA4MSJE8jMzER2djaqqqrw17/+Fb///ju+/PJLmM1mFBQUoKCgQAphWq0W06dPx4IFC7Bp0ybs2bMH9957L/r06YPRo0cDAHr27Ilx48ZhxowZSE9PR3p6OmbMmIEJEyagR48eAID4+Hj06tULiYmJ2LNnDzZt2oSFCxdixowZUqtdQkICNBoNpk2bhqysLKxZswZLly7F/Pnz6+wCdjWL1RqF7rlaIREREXkEZ04p3rx5s0B1NpH93H///eLEiRMOrwEQmzdvll6joqJCzJ49W4SHh4vAwEAxYcIEkZ2dLXuf8+fPi6lTp4qQkBAREhIipk6dKoqKimRlTp06JcaPHy8CAwNFeHi4mD17tmzJFyGE2Lt3r7j++uuFRqMR0dHRYsmSJQ1eAkaIlp9G/sz/skSnRT+ITot+EG9uPNIi70lERORtuAyMEAoh3HTrCw9QUlICrVYLvV7fIuMB/7FmH77ckQ0AmPOXblgQ36PZ35OIiMjbtPT3tzviXsAexGypzeqVJvNlShIRERHVjQHQg1RZBUBDlcWFNSEiIiJPxgDoQarMtaHPYGIAJCIioivDAOhBtIFq6bGhil3AREREdGUYAD3II6Ovlh5/l5mH+d9kgnN4iIiIqLEYAD1IeLA//jU5Vjr+dncufjly1oU1IiIiIk/EAOhh1Cr5ItUXyrglHBERETUOA6CHUavkf2TWS8MQERERNQQDoIfxsw2AHANIREREjcQA6GHUSnkXMFsAiYiIqLEYAD2MbQughS2ARERE1EgMgB7Gz2YSSJWZAZCIiIgahwHQw/izBZCIiIiaiAHQw/jZjAEkIiIiaiwGQA+jDVLLjksqTC6qCREREXkqBkAP07lNsOz4zZ+PuagmRERE5KkYAD1MgFrl6ioQERGRh2MA9AKCE0GIiIioERgAPVCwv7wVsNxodlFNiIiIyBMxAHqg/80eLjsuKje6qCZERETkiRgAPVC3yBBEtNJIx8UXOROYiIiIGo4B0ENZLwB94SJbAImIiKjhGAA9lHUAzC+ucGFNiIiIyNMwAHqoxCGdpMdPfLsPFgtnAhMREVHDMAB6qLk3dZcd/zfjtItqQkRERJ6GAdBDqVVKdItsJR0zABIREVFDMQB6sJAAP+mx0WxxYU2IiIjIkzAAerCbY6Olx5k5xa6rCBEREXkUBkAP9n/Du8iODVXcEYSIiIjqxwDowdQq+R+fsYrdwERERFQ/BkAP5+9X+0doYf4jIiKiBmAA9HBJt/WRHlcxARIREVEDMAB6uDviOkiPzYKLQRMREVH9GAC9gEqpAMAuYCIiImoYpwbArVu3YuLEidDpdFAoFPjuu+9k14UQWLJkCXQ6HQIDAzFq1Cjs379fVsZgMGDOnDmIiIhAcHAwJk2ahNOn5YscFxUVITExEVqtFlqtFomJiSguLpaVyc7OxsSJExEcHIyIiAjMnTsXRqNRVmbfvn0YOXIkAgMD0b59ezz33HMQHtiKVhMA2QJIREREDeHUAFheXo5+/fphxYoVDq+//PLLWL58OVasWIFdu3YhOjoaY8aMQWlpqVRm3rx5WLNmDZKTk5GWloaysjJMmDABZnPtEicJCQnIzMxESkoKUlJSkJmZicTEROm62WzG+PHjUV5ejrS0NCQnJ2P16tVYsGCBVKakpARjxoyBTqfDrl278NZbb2HZsmVYvny5M29Ji1ApaloAGQCJiIioAUQzASDWrFkjHVssFhEdHS1efPFF6VxlZaXQarXivffeE0IIUVxcLNRqtUhOTpbK5ObmCqVSKVJSUoQQQhw4cEAAEOnp6VKZ7du3CwDi0KFDQggh1q9fL5RKpcjNzZXKrFq1Smg0GqHX64UQQrzzzjtCq9WKyspKqUxSUpLQ6XTCYrE06DPq9XoBQHpNV+n9dIrotOgHcfxsmUvrQURE5Anc5fvblVpsDOCJEydQUFCA+Ph46ZxGo8HIkSOxbds2AEBGRgZMJpOsjE6nQ2xsrFRm+/bt0Gq1GDx4sFRmyJAh0Gq1sjKxsbHQ6XRSmbFjx8JgMCAjI0MqM3LkSGg0GlmZvLw8nDx50vk3oBld6gGGmS2ARERE1AAtFgALCgoAAFFRUbLzUVFR0rWCggL4+/sjLCzssmUiIyPtXj8yMlJWxvZ9wsLC4O/vf9kyNcc1ZWwZDAaUlJTIftyB36UFoS0cA0hEREQN0OKzgBWXxqvVEELYnbNlW8ZReWeUEZcCVF31SUpKkiaeaLVaxMTEXLbeLeVCefXklgJ9pYtrQkRERJ6gxQJgdHQ0APvWtcLCQqnlLTo6GkajEUVFRZctc+bMGbvXP3v2rKyM7fsUFRXBZDJdtkxhYSEA+1bKGosXL4Zer5d+cnJy6v/gLWhu8h5XV4GIiIg8QIsFwC5duiA6OhobNmyQzhmNRmzZsgXDhg0DAMTFxUGtVsvK5OfnIysrSyozdOhQ6PV67Ny5UyqzY8cO6PV6WZmsrCzk5+dLZVJTU6HRaBAXFyeV2bp1q2xpmNTUVOh0OnTu3NnhZ9BoNAgNDZX9uJPiiyZXV4GIiIg8gFMDYFlZGTIzM5GZmQmgeuJHZmYmsrOzoVAoMG/ePCxduhRr1qxBVlYWpk2bhqCgICQkJAAAtFotpk+fjgULFmDTpk3Ys2cP7r33XvTp0wejR48GAPTs2RPjxo3DjBkzkJ6ejvT0dMyYMQMTJkxAjx49AADx8fHo1asXEhMTsWfPHmzatAkLFy7EjBkzpNCWkJAAjUaDadOmISsrC2vWrMHSpUsxf/78erukiYiIiDyaM6cUb968WQCw+7n//vuFENVLwTzzzDMiOjpaaDQaccMNN4h9+/bJXqOiokLMnj1bhIeHi8DAQDFhwgSRnZ0tK3P+/HkxdepUERISIkJCQsTUqVNFUVGRrMypU6fE+PHjRWBgoAgPDxezZ8+WLfkihBB79+4V119/vdBoNCI6OlosWbKkwUvACOE+08g7LfpB+iEiIqLLc5fvb1dSCMGpo1eqpKQEWq0Wer3epd3BnZ9YJz0++eJ4l9WDiIjIE7jL97crcS9gL5NXXOHqKhAREZGbYwD0Aj3b1f7vZdiLPyN5Z7YLa0NERETujgHQC7x0Rx/Z8Ysph1xUEyIiIvIEDIBeQBuolh1zDjMRERFdDgOgF4hopZEdcxkbIiIiuhwGQC8QrPGTHTP+ERER0eUwAHqh8+VGmMwWV1eDiIiI3BQDoJcY21u+f/F/M067qCZERETk7hgAvcTzt8bKjj/ddtI1FSEiIiK3xwDoJcKD/WXHhwpKXVQTIiIicncMgF7CT8U/SiIiImoYpgYiIiIiH8MA6MWEEK6uAhEREbkhBkAv0r51oOz4otHsopoQERGRO2MA9CJ3DYqRHQ/810ZUmhgCiYiISI4B0Is8NPIqvHpnP+m4wmTG/rwSF9aIiIiI3BEDoBfx91Pi9mvby86ZLRwHSERERHIMgF5GoZDvBFxl4ZZwREREJMcA6OXYAkhERES2GAC9XJWZARAAftibh1vf/g05Fy66uipEREQuxwDo5TgLuNrsr/bgj5xiLFm739VVISIicjkGQC9nNHMMoLWii0ZXV4GIiMjlGAC9nLGKAdCaSqmovxAREZGXYwD0QuHB/tJjE8cAyigVDIBEREQMgF6oZ7sQ6bGximMArRnYIkpERMQA6I2su33PlhkgBFsBa3AMIBEREQOgV7IOgG9v/hNJPx5yYW3cy7lSg6urQERE5HIMgF7IaDPu74Otx11UE/dTbmSXOBEREQOgFxrdM9LVVXBrBo6LJCIiH8cA6IUevrGbq6vg1i4aGACJiMi3MQB6oQC1CmtmDXN1NdyGxWY/ZM4EJiIiX8cA6KVCA9WuroLbqLIJgFwcm4iIfB0DoJdqpfFzdRXchkXYtgCyC5iIiHwbA6CXigoNkB0/+/1+n10P0LYFkF3ARETk6xgAfcTHv53EL4fPuroaLmG2C4BsASQiIt/WogGwqqoK//znP9GlSxcEBgaia9eueO6552Cx1LbICCGwZMkS6HQ6BAYGYtSoUdi/f7/sdQwGA+bMmYOIiAgEBwdj0qRJOH36tKxMUVEREhMTodVqodVqkZiYiOLiYlmZ7OxsTJw4EcHBwYiIiMDcuXNhNHrvThEXyr33s12OXQA0sQWQiIh8W4sGwJdeegnvvfceVqxYgYMHD+Lll1/GK6+8grfeeksq8/LLL2P58uVYsWIFdu3ahejoaIwZMwalpaVSmXnz5mHNmjVITk5GWloaysrKMGHCBJjNtS07CQkJyMzMREpKClJSUpCZmYnExETputlsxvjx41FeXo60tDQkJydj9erVWLBgQcvcDBdQKRWuroJL2AVAMwMgERH5thadKbB9+3bceuutGD9+PACgc+fOWLVqFX7//XcA1a1/r7/+Ov7xj3/g9ttvBwB8+umniIqKwldffYUHH3wQer0eH330ET7//HOMHj0aAPDFF18gJiYGGzduxNixY3Hw4EGkpKQgPT0dgwcPBgCsXLkSQ4cOxeHDh9GjRw+kpqbiwIEDyMnJgU6nAwC8+uqrmDZtGl544QWEhoa25K1pFp9Pvw6JH+2UjpUMgADYAkhERNSiLYAjRozApk2bcOTIEQDAH3/8gbS0NNxyyy0AgBMnTqCgoADx8fHSczQaDUaOHIlt27YBADIyMmAymWRldDodYmNjpTLbt2+HVquVwh8ADBkyBFqtVlYmNjZWCn8AMHbsWBgMBmRkZDTTHWhZ13dvKzveduwc8oorXFQb1zFzFjAREZFMi7YALlq0CHq9Htdccw1UKhXMZjNeeOEF3HPPPQCAgoICAEBUVJTseVFRUTh16pRUxt/fH2FhYXZlap5fUFCAyEj77dAiIyNlZWzfJywsDP7+/lIZWwaDAQaDQTouKSlp8Gd3lbYhGpwtra5z8q4cJO/KwfuJcRjbO9rFNWs5ZjNnARMREVlr0RbAr7/+Gl988QW++uor7N69G59++imWLVuGTz/9VFZOoZB3VQoh7M7Zsi3jqPyVlLGWlJQkTSrRarWIiYm5bJ3cwX1DOtmde+vnoy6oietUWeSBjwtBExGRr2vRAPjYY4/hiSeewN13340+ffogMTERjz76KJKSkgAA0dHVrVK2LXCFhYVSa110dDSMRiOKioouW+bMmTN273/27FlZGdv3KSoqgslksmsZrLF48WLo9XrpJycnp7G3oMXZrgcIAKYq31oPkOsAEhERybVoALx48SKUSvlbqlQqaRmYLl26IDo6Ghs2bJCuG41GbNmyBcOGVe9tGxcXB7VaLSuTn5+PrKwsqczQoUOh1+uxc2ftBIgdO3ZAr9fLymRlZSE/P18qk5qaCo1Gg7i4OIf112g0CA0Nlf24u0n9dXbnLpqqXFAT16my6wLmGEAiIvJtLToGcOLEiXjhhRfQsWNH9O7dG3v27MHy5cvxwAMPAKjukp03bx6WLl2K7t27o3v37li6dCmCgoKQkJAAANBqtZg+fToWLFiANm3aIDw8HAsXLkSfPn2kWcE9e/bEuHHjMGPGDLz//vsAgJkzZ2LChAno0aMHACA+Ph69evVCYmIiXnnlFVy4cAELFy7EjBkzPCLYNVSAWmV3rtzgWwGIXcBERERyLRoA33rrLTz11FOYNWsWCgsLodPp8OCDD+Lpp5+Wyjz++OOoqKjArFmzUFRUhMGDByM1NRUhISFSmddeew1+fn6YMmUKKioqcNNNN+GTTz6BSlUbdr788kvMnTtXmi08adIkrFixQrquUqmwbt06zJo1C8OHD0dgYCASEhKwbNmyFrgTrnWh3Ig/corRL6a1q6vSIkw2LYAWi291gRMREdlSCF/dINYJSkpKoNVqodfr3brV8I2NR/HaxiOyc22C/ZHx1BgX1ahl7TxxAVPe3y4dP3zjVXhs7DUurBEREbmSp3x/NyfuBewDHhndHVnPjpWdO19utFsg2VtV2ez84SMfm4iIqE4MgD6ilca+t//LHadcUJOWZzsLmF3ARETk6xgAfcicv3STHa/NzHNRTVqW7SQQX2n5JCIiqgsDoA/prdPKjm23SPNWtsvA+MrnJiIiqgsDoA/RqOV/3L7SEmbbBcz8R0REvo4B0Ido/OR/3HtP6/H9H97fDWwbAH0l+BIREdWFAdCHtAnW2J2bs2qPC2rSsmxnAbMLmIiIfB0DoA+JCrUPgL7AdgwgZwETEZGvYwD0Ia2D/F1dBZewWwaGLYBEROTjGAB9zPi+7VxdhRZnvwyMiypCRETkJhgAfczNsdGurkKLs+sCZgsgERH5OAZAHzO+Tzv856GhsnPePiaOC0ETERHJMQD6GIVCgUGdw2XnTBbv7hPlGEAiIiI5BkDCL4fPuroKzYpdwERERHIMgIQHP8/AT/sLXF2NZlOzDqBKqQDALmAiIiIGQB+17M5+suMHP89wUU2aX00XsL+q+ted+Y+IiHwdA6CP+mtcB7tz+gqTC2rS/GoCYM1eyN4+6YWIiKg+DIAkWfbTYVdXoVnUjAGsaQHkVnBEROTrGABJcuJcuaur0CzMl2Y5B/mrAADGKu+e9UxERFQfBkCSXDRWuboKzaKmxS9Y4wcAuGg0u7I6RERELscA6MNuuiZSduytwahm67eaAFhp8s7PSURE1FAMgD7Mdj08b10eRVz6nK0uBcAKBkAiIvJxDIA+zGZ9ZHhn/KsNtjUtgBVe2tJJRETUUAyAPsx2ORRvXR7FLLUAVk8CYQAkIiJfxwDow2y7gI1m75wdW/Mxg/3ZBUxERAQwAPq0mi7RGt66PEpNF3DQpc9bZREweWnYJSIiaggGQB828uq2smNvDUW2XcAAWwGJiMi3MQD6sITrOsqOTbazQrxEzSzgALUKKqUCAMcBEhGRb2MA9GFKpQK7/jFaOi4zVOG/GadRUuldewLXdAErFQoEqqtbAb11zUMiIqKGYAD0cW1DNAixGgu48D9/YP7Xf7iwRs5XM7lZpVTA36/6V77KS7u7iYiIGoIBkPD63f1lxxsPnnFNRZqJRWoBhNQFXOWlS94QERE1BAMgoV9MaygU8nO7s4tcU5lmUDMJRKlQwK8mAHrpeEciIqKGYAAkRLTSSNuk1fizsMxFtXE+6y7g2hZAdgETEZHvYgAkAEBpZZXsONBfVUdJz2OxmgSiVlX/ynvrvsdEREQNwQBIAIDxfdrJjv1V3vOrIc0ClrUAMgASEZHvavFv+dzcXNx7771o06YNgoKC0L9/f2RkZEjXhRBYsmQJdDodAgMDMWrUKOzfv1/2GgaDAXPmzEFERASCg4MxadIknD59WlamqKgIiYmJ0Gq10Gq1SExMRHFxsaxMdnY2Jk6ciODgYERERGDu3LkwGo3N9tnd2aNjrpYde9O2cDVb3qmsxgCyBZCIiHxZiwbAoqIiDB8+HGq1Gj/++CMOHDiAV199Fa1bt5bKvPzyy1i+fDlWrFiBXbt2ITo6GmPGjEFpaalUZt68eVizZg2Sk5ORlpaGsrIyTJgwAWZz7dpuCQkJyMzMREpKClJSUpCZmYnExETputlsxvjx41FeXo60tDQkJydj9erVWLBgQYvcC3fTLbIVpgzsIB1XmrwvAFrPAjaZLdh8uBAvpxxiGCQiIt8jWtCiRYvEiBEj6rxusVhEdHS0ePHFF6VzlZWVQqvVivfee08IIURxcbFQq9UiOTlZKpObmyuUSqVISUkRQghx4MABAUCkp6dLZbZv3y4AiEOHDgkhhFi/fr1QKpUiNzdXKrNq1Sqh0WiEXq9v0OfR6/UCQIPLu7sqs0V0WvSD9HOutNLVVXKK295OE50W/SBSsvLFpLd+FZ0W/SA2HiiQPud3e067uopERNSCvO37+0q0aAvg2rVrMXDgQNx5552IjIzEgAEDsHLlSun6iRMnUFBQgPj4eOmcRqPByJEjsW3bNgBARkYGTCaTrIxOp0NsbKxUZvv27dBqtRg8eLBUZsiQIdBqtbIysbGx0Ol0UpmxY8fCYDDIuqStGQwGlJSUyH68iUqpwA1W+wNP/XCHC2vjPNIsYIUCfpfGNlqPAczXV7qiWkRERC7TogHw+PHjePfdd9G9e3f89NNPeOihhzB37lx89tlnAICCggIAQFRUlOx5UVFR0rWCggL4+/sjLCzssmUiIyPt3j8yMlJWxvZ9wsLC4O/vL5WxlZSUJI0p1Gq1iImJaewtcHv5xRXS40MFpZcp6TmkLmBlbRewdbevUuHwaURERF6rRQOgxWLBtddei6VLl2LAgAF48MEHMWPGDLz77ruycgqbVYmFEHbnbNmWcVT+SspYW7x4MfR6vfSTk5Nz2Tp5Iutg5C0zga33AvZzMAtYWc/vFhERkbdp0W/4du3aoVevXrJzPXv2RHZ2NgAgOjoaAOxa4AoLC6XWuujoaBiNRhQVFV22zJkz9tuZnT17VlbG9n2KiopgMpnsWgZraDQahIaGyn68TU1rGQCMi412YU2cpybrKRVWy8BYzXJO3X+GE0GIiMintGgAHD58OA4fPiw7d+TIEXTq1AkA0KVLF0RHR2PDhg3SdaPRiC1btmDYsGEAgLi4OKjValmZ/Px8ZGVlSWWGDh0KvV6PnTt3SmV27NgBvV4vK5OVlYX8/HypTGpqKjQaDeLi4pz8yT2HdQ4yVJnrLuhBahaCVikdtwDuPHkB3/zufa25REREdWnRAPjoo48iPT0dS5cuxbFjx/DVV1/hgw8+wMMPPwygukt23rx5WLp0KdasWYOsrCxMmzYNQUFBSEhIAABotVpMnz4dCxYswKZNm7Bnzx7ce++96NOnD0aPHg2gulVx3LhxmDFjBtLT05Geno4ZM2ZgwoQJ6NGjBwAgPj4evXr1QmJiIvbs2YNNmzZh4cKFmDFjhle27DWUdQvgT/vPyFrKPJVsL+BL3dqGKvnn+vXo2RavFxERkau0aAAcNGgQ1qxZg1WrViE2NhbPP/88Xn/9dUydOlUq8/jjj2PevHmYNWsWBg4ciNzcXKSmpiIkJEQq89prr2Hy5MmYMmUKhg8fjqCgIHz//fdQqWq3L/vyyy/Rp08fxMfHIz4+Hn379sXnn38uXVepVFi3bh0CAgIwfPhwTJkyBZMnT8ayZcta5ma4qc5tgmXHq3Z5fsuY9TqANS2AFUb51nccB0hERL5EIYTg4KcrVFJSAq1WC71e7zWthrnFFXj4y93IzCkGAIzuGYUP7x/o2ko10ahXNuPk+Yv470ND8cm2k/hhbz6u7x6BX4+ek8rc2l+HN+4e4MJaEhFRS/HG7+/G8o5pnuQ07VsH4ruHh0vHcZ3CLlPaM0iTQKzGAFqHPyIiIl/DAEgO3T6gPQDgpZRDOFPi2QslWy8Do1I6/pU3ecFYRyIiooZiACSHVFarI7+35U8X1qTpasYAqhQKqFWOx/oZqxgAiYjIdzAAkkN+VkHp499OoqjciHNlBhfW6Mo52gnEVptgTUtWiYiIyKUYAMkh26A0+Z3fMPBfG/HahiMuqtGVq+ndtd4JxFaUNqAFa0RERORaDIDkkJ/NWLlT5y8CAN7YdNQV1WkSqQtYWfcYQG9Y75CIiKihGADJobq6Sj2RbB1AmzGAI69uC0C+MwgREZG3YwAkh+rqKvVE1rOAz5cZZdfCgtQAgA+2Hse+0/oWrxsREZErMACSY96T/2R7Aa/efVp2LSq0duxfwsr0Fq0XERGRqzAAkkMlFSZXV+GKHMgrwdCkTfjm99ot7KSFoBUKhAb4ycpHWgXAUoN8ezgiIiJvxQBIDp0tNdZfyA0t/nYv8vWVePy/e6VzZmkZGAW+mjFEVr6mC7iG/qJnBl8iIqLGYAAkhzx1zT+zg62tpS5ghQKx7bWya8EaeYvgmz/LZzkvTz2MW974lcGQiIi8CgMgOVRS6ZmBR+OnsjtnPQsYALY8NgpRoRq8O/VaaPzkfwUKS2uDb6XJjDd/PoYD+SXYevRs81WaiIiohTEAkkNLb+vj6ipcEX+V/FdaCFE7BvBSAuzUJhg7nhyNm/u0g79NADRbatcDLK2sHRNYoPfs/ZCJiIisMQCSQ0O6tsHK+wY6vFZU7r7jA20DnXWPsEphP7XZtgVw/b4C6XFWXu2yMG964ALYREREdWEApDrZLppcY39eSQvXpOHUNi2A1mMClQ4CoL/Kvsu4xtyv9kiP27XmVnFEROQ9GACpTnUtBXjvRztatB6NYZvxzFY7fDjaBc52x5MeUSHSY+tlYY6cKUOlyeycShIREbkYAyDVybrF7KGRV7mwJldO1gXsYHcTB42CkvheUbLjD7Yed1a1iIiIXIoBkOp0bacwAEBkiAZP3HyNi2vTMLZ5rr4uYNtTh8+UAqiePJJ64IzsWsapIqfUkYiIyNX86i9CvqqVxg8HnxsHtYOxgGWGKrTSuN+vz2W7gB0EwJAAtd25rFy9w9ZC2wkmREREnorfaHRZgf4q+F2aWHFtx9bS+dhnfkJhifstjaKwaQMUshZA+/LtWwfin+N74r6hnaRzB/JKYKiy2JVlACQiIm/BbzRqsLk3dZcdz/w8w0U1qZt1I58QQtYC6KhVDwD+dn1XJA6pDYD+fkpcdLAvsO0ag0RERJ6K32jUYNdEh8qOM3OKsfaPPBfVxjHrAGgRtWMAFQpAcbkZH1b8/ZR4dcMRu/MBav51ISIi78BvNGqwaK39WnhzV+1xUNI9mMwWaRawo/F/1ozm2i5ff5XS4YSPjuHBTq0fERGRqzAAklexHgNottR2ATvaBcRa98ja9f/2ni7GzbHRAIDRPaNw18AYALV7ChMREXk6BkBqlM5tglxdhcuzynlV5toA6GgRaGvWEzze/PkYLhqrF30e3q0NVJdmQVuPJyQiIvJkDIDUKB/eP1A2G9idVVka3gVsa8uRswAAjZ9Kaj2sYgAkIiIvwQBIjdItMgSfTx8sO+dOLWMWq7pUWYQ0CaS+LuC6+PsppdnDZov90jBERESeiAGQGs12PbyHvnCf5WDMNgGwZtyeso4lYOqj8VPC79JzD+SVNL2CREREboABkBrNzyZMbbDZMs2VrAOg2SykFsErzH/VLYCXxgBuPnwWRy5tFUdEROTJGACp0Rq6np4rWI/TM1kstV3ADUiANbN9rQWoVbJu5R3HzzuhlkRERK7FAEhX5JsHh8qOt/15zkU1kbNeqsVsEagZtteQ0PrSX/ti+ogusnMhAX4oM5il40B/99v/mIiIqLEYAOmKaAPVsuOElTtQ5mD7tJZWZbZqATRbpEDY0Ekg/WNay45DNH4wVNUGwNJKU9MrSURE5GIMgHRFHHWpvpp62AU1kZONAbReCLqBgwBbBchb+NQqpWwP4HI3CLlERERNxf4suiK2E0EA4PeT9tuntTSzsG4BFNLkj4YOW4zVaWXH7cMCEaBWScfGKi4FQ0REns+lLYBJSUlQKBSYN2+edE4IgSVLlkCn0yEwMBCjRo3C/v37Zc8zGAyYM2cOIiIiEBwcjEmTJuH06dOyMkVFRUhMTIRWq4VWq0ViYiKKi4tlZbKzszFx4kQEBwcjIiICc+fOhdFobK6P61UctaiZLQLCxdulVdm0AFoaMQkEANqGaKTH13ZsDbVKiXuHdJLOGc3us+YhERHRlXJZANy1axc++OAD9O3bV3b+5ZdfxvLly7FixQrs2rUL0dHRGDNmDEpLa5ffmDdvHtasWYPk5GSkpaWhrKwMEyZMgNlcO1YrISEBmZmZSElJQUpKCjIzM5GYmChdN5vNGD9+PMrLy5GWlobk5GSsXr0aCxYsaP4P76UO5Jegy+L1Lh0LaL1Yc5XZgpLK6roEWrXi1eetewagZ7tQvDqlPwCgW2Qr3HNdRwBsASQiIu/gkgBYVlaGqVOnYuXKlQgLC5POCyHw+uuv4x//+Aduv/12xMbG4tNPP8XFixfx1VdfAQD0ej0++ugjvPrqqxg9ejQGDBiAL774Avv27cPGjRsBAAcPHkRKSgo+/PBDDB06FEOHDsXKlSvxww8/4PDh6nFqqampOHDgAL744gsMGDAAo0ePxquvvoqVK1eipIQL/tbHaK47CLlyrTzralVZBE6cLQcAdIkIbvBrTOynw4+PXC97TuSllkGj1X8yiIiIPJVLAuDDDz+M8ePHY/To0bLzJ06cQEFBAeLj46VzGo0GI0eOxLZt2wAAGRkZMJlMsjI6nQ6xsbFSme3bt0Or1WLw4Noty4YMGQKtVisrExsbC51OJ5UZO3YsDAYDMjIc72xhMBhQUlIi+/FV1l2ltvKKK/DZ9pPo/MQ6fPN7TgvWSt4CaLYIVF6awRvUxOVbanY/MVWxC5iIiDxfi08CSU5Oxu7du7Fr1y67awUFBQCAqKgo2fmoqCicOnVKKuPv7y9rOawpU/P8goICREZG2r1+ZGSkrIzt+4SFhcHf318qYyspKQnPPvtsQz6m1wsNUGPj/Bug8VPh2925eG3jEena7K/2SI8f/+9eTHGwwHJzkS0EbbZIizirmvhfnZqZwJdr+SQiIvIULdoCmJOTg0ceeQRffPEFAgIC6ixnu2ivEKLehXxtyzgqfyVlrC1evBh6vV76yclp2dYtd9MtMgQx4UF2ewPbaskxgbbLwNQcNnQSSF1qPiPHABIRkTdo0QCYkZGBwsJCxMXFwc/PD35+ftiyZQvefPNN+Pn5SS1yti1whYWF0rXo6GgYjUYUFRVdtsyZM/b70549e1ZWxvZ9ioqKYDKZ7FoGa2g0GoSGhsp+CIgJD7zs9TesWgebm2whaKt1AJVN3L5OzRZAIiLyIi0aAG+66Sbs27cPmZmZ0s/AgQMxdepUZGZmomvXroiOjsaGDRuk5xiNRmzZsgXDhg0DAMTFxUGtVsvK5OfnIysrSyozdOhQ6PV67Ny5UyqzY8cO6PV6WZmsrCzk5+dLZVJTU6HRaBAXF9es98Hb3BzbDh3C6g6BxwrLWqwuJrP1GEBLo5eBqQtbAImIyJu06BjAkJAQxMbGys4FBwejTZs20vl58+Zh6dKl6N69O7p3746lS5ciKCgICQkJAACtVovp06djwYIFaNOmDcLDw7Fw4UL06dNHmlTSs2dPjBs3DjNmzMD7778PAJg5cyYmTJiAHj16AADi4+PRq1cvJCYm4pVXXsGFCxewcOFCzJgxgy17jaRSKpC26C+Y+FYa9uXq7a7X10XsTNYB0GR2XgsgAyAREXkTt9sJ5PHHH0dFRQVmzZqFoqIiDB48GKmpqQgJCZHKvPbaa/Dz88OUKVNQUVGBm266CZ988glUqtq13r788kvMnTtXmi08adIkrFixQrquUqmwbt06zJo1C8OHD0dgYCASEhKwbNmylvuwXmZ/nn34A4CcCxUNGsfpDNZdwGaLkHYGaXILoKr6+SZ2ARMRkRdQCFdv3eDBSkpKoNVqodfr2WoIYHXGaSz4zx8Or90cG413723+rvUe//wRhkutdM/f2hvZFy5i5a8nMPOGrnjylp5X/Lo/HzqDBz75Hb11oVg393pnVZeIiFyA398u3gqOvMvt17av89qPWQXSkizNyXoZmCqLkBaGbnIX8KXW5f15JTjqwoWuiYiInIEBkJymvi7e3OKKZn1/s9Ws35rj2kkgTXtttar2s73y0+GmvRgREZGLMQCSU/28YGSd10oqTc363rbj86wngaicNAkEADSN2FeYiIjIHTEAklN1bdsKgXUEpFtX/IbH/vMHyptpYegqmy5ms8UiTQJROmkZGAAIVPOvDREReTZ+k5HTTR/RBQDQP6a17HyVReA/Gafx4o+HUGE0O/19TVX2LYAWJ7UAWu997NfU/mQiIiIX4zcZOd280d2xasYQJM8cgkXjrrG7/nn6KfR6JgX/y8x16vuaLPIAaD0msKktgJEhtVsXdm4T1KTXIiIicjUGQHI6P5USQ69qgwC1Cn+7vovDMkIAz/9wwKnvazLLu4BNVl3ATV0HEADuuLYDAKAFJjMTERE1KwZAalZqlRL/fWhoi7xXle0kkCrndQEDQE2G/P1k0eULEhERuTkGQGp2V0eHODx/rsyIwtJKp72P7Sxgo9kstdY1tQsYAP67+zQAYOPBM01+LSIiIldiAKRmF+xf946DiR/udNr72HYBG0wW6Cuql55ROWEXOu6ZQ0RE3oIBkJqdSqlAkL/jpWEOO3FXDdsWQEOVBdv/PA/AOS2ARERE3oIBkFrExXqWfRFCoKnbUtu1AFaZERpY3frYMdy5M3dT9xc49fWIiIhaEgMguZzFIvD+1uPosyS1SfvsOmoBrAmFHcKaHgDbaWuXgpn5eYZTxy8SERG1JAZAcrnv9+bhxR8PocxQhU+2nbzi17ENgJUms3TO3wmLN69IuFZ2vDz1SJNfk4iIyBUYAMnlHknOlB6bm7DIXpVNF/Dxs+XSOT8nzALpEBYoOy5rpi3tiIiImhsDILWIXx+/sUHlknflXHEINF5q7asZ71dYapDOqZ3QAhjgJ5/IonDC2oJERESuwABILSImPAgL469uUNnDBVc2DrCmuzdYY7/sjNoJLYCtAuSva7vwNBERkadgAKQW87fruzao3C1v/oo3Nx0FAGw4cAbf/J7ToOfVBEBHS844owXQdjs5YxUDIBEReSYGQGoxAeraYPbUhF6XLbt8Q/UEixmf/Y7H/7sXf54tq/f1TVXVXceOAqAzxgDaOpBf4vTXJCIiagkMgOQSHcOD8P3sEZct0/mJddLj7AsX633NmvF+gWoHLYBK5/yqr/77MOlxvr4SSesPAgD+yCnGU99l4e3NxzD1w3QMXroRnzZhRjMREVFzqnuPLqJm8MX0wdibW4zRPSOhUChw8sXxOFdmwN+/yMCuk0V1Pq/k0pZul1PTJatRq6BSKqTJJCqlwmk7gcR1CsPMG7rig63HAQDvbz2O4osmfO2gm/qZtftx/7DOTnlfIiIiZ2ILILWoEd0jMGtUN9kM2ohWGgzqHH7Z5z2SnInyepZdMUkzfhXwswp8jloEm8K2Ho7CX437/70TxxvQfU1ERNSSGADJYwxJ2nTZ6zUBUOOnlAXAiFb+Tq1HY1ap2XLkLP7y6hboG9CCSURE1FIYAMljlFZevgXQeGnRZ7VKiXKrvYcjQwPqekqLGff6VldXgYiISMIASG7h9mvb11smQC3/dX178zGs/SNPOjbVsehz3/ZaJ9TQWuMXqs7X1+4bLIRgiyAREbkUAyC5hW6RIfWWqTRZcKywepHoP3KK8cpPhzF31R7puqnKcQBswu5yDlmucPm/zJxiAMCLKYfQ79lU/HK40HmVIiIiagQGQPIoo5dvxSPJe/BSyiG7azXLwPirFGgdpJbOV1aZ7cq6wuS3fwMAvL+legbxv9YddGV1iIjIhzEAktuL6xQmO/5fZh62/Xnerpx1F/AT466RzjtpBRiJuIIu4BppR89Jj7mTMBERuQoDILmtCX3bYeV9AzF9RJfLlvvnd/tQWFoJ46WdQPz9lLi1f+2YQmd3AQ+9qo30uHOboEY9996PdkiPzc6uGBERUQMxAJLbePjGq6THd8Z1wIqEazGmV1S9QemL9GzEv7ZV1gIYaLUdnMXJQevWfu3x1j0D8OvjN+Llv/ZDgFqJq6NaNfp1jp8rxz+/24efD51xav2IiIjqw51AyG0sjO+BqYM7Qdc6UHa+JthdTvFFU20A9LOdBOLcAKhUKjCxnw4AEBMehKwlY+GnUsq2rgOqF6CuMF1+/OEX6dn4Ij0be54ag7Bg565XSEREVBe2AJLbUCgUduEPaFgAtC7nr6oeXdcjqnpm8eT+9S8x0xR+Ksd/jVoF+OGrvw1u0GsUlhpkx4cLSrmDCBERNRu2AJLbM5kb1oK38WD1sio1y8CseXgYcosq0D2q/iVmnGHKwA745vfT6K0LhaHKglfv7IfOEcENeq71uoAllSaMvbRw9PGltzhtH2MiIqIaDIDk9jo1cqJFTQAM8vdrsfAHAC/c1gcJgzuhT3stVJdCW2U9XcA1zpXVtgAWltQ+NlRZZOMZiYiInIFdwOT2RnSLwPO39sanD1zXoPIje7Rt5ho5plYp0T+mtRT+AMDfqntYp617S7pZX+7Gd3tyLx3Vtng2NEASERE1RosGwKSkJAwaNAghISGIjIzE5MmTcfjwYVkZIQSWLFkCnU6HwMBAjBo1Cvv375eVMRgMmDNnDiIiIhAcHIxJkybh9OnTsjJFRUVITEyEVquFVqtFYmIiiouLZWWys7MxceJEBAcHIyIiAnPnzoXRaGyWz05XTqFQIHFoZ4zoFiGd87tMt2grf/dp2Lbuvr25T7vLlp33dSYASMvZAHUvYr3tz3P45vecpleQiIh8UosGwC1btuDhhx9Geno6NmzYgKqqKsTHx6O8vFwq8/LLL2P58uVYsWIFdu3ahejoaIwZMwalpaVSmXnz5mHNmjVITk5GWloaysrKMGHCBJjNtV+WCQkJyMzMREpKClJSUpCZmYnExETputlsxvjx41FeXo60tDQkJydj9erVWLBgQcvcDGo0lVKBL6YPxsr7BuLY0lsQonEc9Nx1zJyfqv56ZeXqUWGqko4rTRYcP1uGr3dly5bDSVi5A4//dy/2ndY3S12JiMi7KYRw8hoZjXD27FlERkZiy5YtuOGGGyCEgE6nw7x587Bo0SIA1a19UVFReOmll/Dggw9Cr9ejbdu2+Pzzz3HXXXcBAPLy8hATE4P169dj7NixOHjwIHr16oX09HQMHlw9CzM9PR1Dhw7FoUOH0KNHD/z444+YMGECcnJyoNNVL+mRnJyMadOmobCwEKGhofXWv6SkBFqtFnq9vkHlybnW7c3Hw1/tlp0b1DkM/3lomItq5FjN8jCzb+yGFZuP1Vu+bYgGZy/NCtZpA5CnrwQAvPLXvojvFY0LF424cdkvAIB3p14rtSwWllYir7gS/WNaO/9DEBF5EX5/u3gMoF5f3XoRHh4OADhx4gQKCgoQHx8vldFoNBg5ciS2bdsGAMjIyIDJZJKV0el0iI2Nlcps374dWq1WCn8AMGTIEGi1WlmZ2NhYKfwBwNixY2EwGJCRkeGwvgaDASUlJbIfcp3xfe27VL+eOdQFNWkYlVKB1+/qX2+5s1ZLwtSEPwB48cdD6PdcqhT+AMg2pRuydBMmv/0bYp/5Cf9h9zAREV2GywKgEALz58/HiBEjEBsbCwAoKCgAAERFRcnKRkVFSdcKCgrg7++PsLCwy5aJjIy0e8/IyEhZGdv3CQsLg7+/v1TGVlJSkjSmUKvVIiYmprEfm5zsjbv7y47dtfsXANQqBSYPaI+TL47HzbHR0vkpAzs06Pnny+3Hp+7P0+P2d37DjuPnpS3vygxVeOy/e51SZyIi8k4uC4CzZ8/G3r17sWrVKrtrCoX8S1wIYXfOlm0ZR+WvpIy1xYsXQ6/XSz85OWxlcbVbm3mRZ2cIurSMy6getf8psR54YX2+sd7e/Cd2Zxfjrg/Sr/g1iIjI97gkAM6ZMwdr167F5s2b0aFDbetHdHR1q4htC1xhYaHUWhcdHQ2j0YiioqLLljlzxn5/1bNnz8rK2L5PUVERTCaTXctgDY1Gg9DQUNkPud6DI7sCAG4b4J5h8LdFf8G6uSMQ214rnbPenk7j1zx/Da2H954tNcBY1bAdVYiIyPu1aAAUQmD27Nn49ttv8fPPP6NLly6y6126dEF0dDQ2bNggnTMajdiyZQuGDase2B8XFwe1Wi0rk5+fj6ysLKnM0KFDodfrsXPnTqnMjh07oNfrZWWysrKQn58vlUlNTYVGo0FcXJzzPzw1m4XxPfDNg0Px4h19XF0Vh8KC/dFbp5Wds25k9m+mAHj1P3/EpoNncLigFINe2IjEj3Y0y/sQEZHnadFZwLNmzcJXX32F//3vf+jRo4d0XqvVIjCweg/Yl156CUlJSfj444/RvXt3LF26FL/88gsOHz6MkJDqXR3+/ve/44cffsAnn3yC8PBwLFy4EOfPn0dGRgZUqurutptvvhl5eXl4//33AQAzZ85Ep06d8P333wOoXgamf//+iIqKwiuvvIILFy5g2rRpmDx5Mt56660GfR7OIqIrdfJcOe54dxumX98F04Z1xuyv9qBTmyB8/NvJ5n3fF8c36+tT89mdXYSYsCC0DdG4uipEHo/f3y0cAOsaW/fxxx9j2rRpAKpbCZ999lm8//77KCoqwuDBg/H2229LE0UAoLKyEo899hi++uorVFRU4KabbsI777wjm5Rx4cIFzJ07F2vXrgUATJo0CStWrEDr1q2lMtnZ2Zg1axZ+/vlnBAYGIiEhAcuWLYNG07B/YPkLRE3haLzp8tTDePPn+peKuVJbHhuFTm3q35/YWGXBb8fOYVCXcLSqY71FajkZpy7gjne3AwCO/OvmZms1JvIV/P528TqAno6/QNQc9p3WY+KKNOn4y78NxtQP5d23apUCJnPj/+recHVbfHZpS73zZQZk5ZXghu4RdkH05ZRDeOeXPzG8Wxt8+bchV/ApyFkK9JUYkrRJOn5qQi9MH1E7fEYIAUOVBQFq7hlN1FD8/uZewERup08HLXq2q/0HaXi3CGQ+PUY6vue6jpg3+uoreu3fjp3DuNe3ovMT6xD3r424/987sXp3LpJ+PIhJK9JQYTTjbKkB7/zy56Xy55v2YajJXk2Vb5f5/A8HZMczP89A32dTZetHEhHVhwGQyA29dEcfhAb44blbewOQTxRJHNIJiUM7XdHrmi0ChwpKZecW/ucPvL/lOPae1uO7zFw8szZLdt1isW9p3HrkLDo/sQ4PfLILF41VdtfJecrruL8H80tw5EwpNhw4A2OVBd//kdfCNSMiT8YASOSG+nZojcyn43Hf0M4AAD9l7V9Vfz8lQgPUyHp2LP5xS0/Z87q2rX983+Us/nYf1u+TL49046u/oMJolp2779/VM+x/PlSIl3481KT3pMvzV9n/M/3n2TLc/MaviH9tq3RO3YC9pomIajAAErkp611N/P2UGNMrCkO6hqNrRHXIa6Xxw4wbukqtgx3CArFm1nC8d++1Tq3HqfMXsfXoWeQWVyDxox3YfKhQdj3t2Dmnvh/Jafzsx/Y9+nWm3TmVkv+cE1HDcXofkYdYed9Ah+d/W/QXbDx4BpP66RCs8cO4WPs9kpvqwc9r98f+9ag88FlPIBFC4FyZkUuVOJHKQcve6aIKu3NsASSixuB/GYk8XNsQDe65riOCL7Ncy4qEAc32/hVGM4ovGlFYWolFq/di0Asb8d2e3GZ7P1+TcbLI7twFB/tCqx10FRMR1YX/YhB5oeVT+uG6LuHScaxOiykDO1zmGVcut7gC/Z/bgOte2IRvfj8NAJj3dSbmf52J3GJ5S1WBvhJFDsILOWa2CBw+U1p/QQBP/y8Lq3ZmN3ONiMhbMAASeaHbr+2A5Bm16/dFawPQvnVQi9bh2z25WPBNpnRcUmnCkKRNGPD8hrqfRDLWM6z/b3hnvHpnvzrLllRWYfG3+7DtT47JJKL6cQwgkZdSKhX445l4WCwCAWoVHhjRGb/9eQ47T1xosTqkH699r/curS0IVLdsqZQcs1afckPt7OvrOocjogFjK0+eu4hhVzVnrYjIG7AFkMiLaQPVCAv2BwCEBKjxzYNDERLQsv/vO3qpC/MdqwDItQMbxnoNwHGx0QhwMCPYFocCElFD8J8KIh/zxt39AVTPGrXeYaS5ZF+4CNsdJ0sqq2CxCPx27BySOW6tTuWG6gCo0wZAoVBAo67/n+y69lwnIrLGLmAiH3Njj0h8MX0wuke1Qusgf+x88iZ8tTMbd1xbPUmkQ1gguixe77T3m/7p73bnhr/4M/p20GLvaT0A4OroEJw8V45fj57DzBu6Yl5yJmb/pRsm9tNd9rVLKk14Z/OfuLW/TrZ9nrcoqagOgK0utdpq/OQB8KGRV+HTbSdRYartKn78v3sxZWBMy1WSiDwSWwCJfIxCocCI7hGICg0AAESGBmDe6KsREx6EmPAgKBQK7H6q7pbBfUvisf/ZsbJzAQ1ombJVE/4AICtXj/nf/IE1e3Jx8xu/4vCZUsxZtafe10hafxDvbfkTN7/xa6Pf3xPUbO8WFlTdjW+7KPQTN1+Dg8+Pw71DOsrO27a4EhHZYgAkIjvhl8YN1rDejkytUiJY44c/nomXzt02oGlLzOzPLbmi5+3JLm7S+7qz9OPn8fXvOQCAmjjnZ7XY87RhnaXHKptu3wX/+aO5q0dEHo4BkIjqteXxUejZLhRxncKkbshWVgtPzxp1FT5IjMP7iXFX9Po1QcdWVq4eCSvTMeqVzbj7g+1IP34e+osmfLD1T+TrK3CooP418o4VlmJ1xmmPahWrNJnxauph6XhQ5zAA8nv+xM3XSI+VNjOqv93duIW4i8qNWPbTYZw4V15nGU+6f0RUP44BJKJ6tdMGYt2cEQBqJxmolAq88te+KDdUSd3He08XO/V9J7yVJj0+ef4i7v4gHeN6RyNlfwHe33K8Qa8xevlWAECAWoXxfWu3yRNC4OPfTuKa6BAM6xbh1Ho3Rc6Fi7j+5c2yc3cPqu7iDVCrsHH+SOlxDbPFPpwJIS47ISR1fwFKKqvw17gOWLR6L1IPnMGqndn497RBEAB++CMPM2/oisjQAGw+XIhHv87Ey3f0RXzvaCd8SiJyNQZAInJo7l+64c2fj+Ffk2MB2LcyAcCdNpMNTGZLs9crZX8BAOC8zY4i3+zKwVWRwWjfOgirdmZj6uCOiLw0zhEA9mQXyQLgr0fP4bkfDgAATr44vtnr3VAPfLLL7pz17N9uka3srju672fLDPj4t5O4rnM4brwmEhVGMwL9q0NjpcmMmZf2d9725zmkHjgDoPqe3vr2b9JrfJh2AqtmDMH/fVxdp5mfZ7jVvSKiK8cASEQOPTrmatw7pJMsRNWnf0wYJvbTwU+pwP48PY6cKWvGGso9vnovACC2fSiyckuw7c9z+M9Dw6TrZpsuzFPn6+7urFFfK5ozCSHw5JosHC20v2e2kz9sGavsWwCve2ETAOBd/IlF467BSymHAAD3XBeDm2Nrg3B93cX3rEyvt+7WcosrEB0awIW+idwcxwASkUMKhaJR4Q+o7hZ+654BeO2u/kh9dCRevL2PXZm7BzXvEiVZlyaU7DpZJBvTZp3/fj95QWr9A4AtR87avc6Hvx5H3L82SgtZN7ezpYY69/Ktb5b19BFdLnu9JvwBwKqdOXjwUutfU50rM+D/Pt6Jf6edgBACGw6cwfAXf8YjyfXP4CYi12IAJKJmY914tv/ZsTiRdAtevKMvEgZ3rPtJTnTjsl+kx1/uOAUAuFBuxF/f2w6TuTYR3v/vnbLnlRuq8K91B3Gh3CgLigBgrLKgwmhGzoWLWL8v32mTI0oq694dxb+e7T166Rq3BqL1uoFNkbT+EDYfPovnfjiALovXY8Zn1Ws+/rA3/7LPa4kJJaWVJqRk5aPSSZ+VyNswABJRs7m2Y5j0OFjjJ3WnLr3NvmWwuZnMAmdKKpFQR5emyWzBvOQ96P9cKno/85N0viZA/HbsHI6fLcOoVzajz5KfcP3LmzHry934X2aeVPb7P/Lw9uZjV1S/MkPdAbAh3dBrZw+/ovdtrKNnSiGEwDe7crB69+k6y72x8SiqrMYmCiFgsQi8mnoYI17ajLOlhmat56wvd+OhL3bbBfi6XCg34qf9BQ4n1BB5I4Xg3P4rVlJSAq1WC71ej9BQ79uFgMgZ/sgpRmSoBu20gbLznZ9Y56IaOfbwjVfh7c1/OrzWqU0QTp2/WOdzl93ZD7rWAUhYuQMA8L+Hh6NfTOtGvX/a0XO496MddufvuLYDXp3Sr0GvMf+bzEYvAdNYYUFqqJRKnCtrWIDrGB6ETQtGYuqHO6C/aMLhS13qtw9oj+V39QdQPYv5499OYEjXNohtr4XZIuzGEB49U4pn1u7HvNFX47ou4dL5b3bl4Ovfc/B+Yhz2ZBfjg61/YvmU/tJMaqUCOJ5U/8SVyW//hsycYjx5yzWYecNVMJkt8FMquLWel+L3NwNgk/AXiOjKvbDuAFbvzsUFm9m83uCugTEY3SsKo3tGNjhArNqZjcXf7rM7v+sfo9E2RNPg916eehhv/nxlrZDNJSxIjaKLJrvzNTOKv9qRjSfXVH/252/tjaf+tx9Lb+uDvh20MFSZ0T0qBH2XpErP+3bWMKl1ueY/EvcO6Ygv0h2PoTzyr5vh72ff4VWz5M59Qzvhs+3VQwTatw7ET4/egJEvb0a/mNZ4O+FaaPyUDmfBu6tT58thEUCXiGBXV8Vt8fubAbBJ+AtE1DQWi0DXJ6v3HZ5xfRdo/FRYcYVdqO7oo/sH4i/XROLTbSehUiow8upIdGwTBAAoLKlEoL8KH6WdwI7jF7D9+Hm750eFarDjydGNes+PfzuBZ79vWLenqx1fegsuXDRi5me/Y/dldnXpFtkKx6xmR4do/LDv0naEDW1Jvjk2GisSroUQAgLVO9o4eq42UI1/TY6VbUU4vFsbfPm3IQ37UC5mrLLg6n/+CAA49Pw42XqRVIvf31wGhohcSKlU4LGxPbBubz5m/6U7IIAdJ85DrVJi25/2gciR0T2jsPHgmWau6ZX5akc2Kk0WLJEC2X788XQ8qiwWXLd0E9QqhWwySo1Zo67CO7/8eUVjJacMjGl0ABzerQ3yiyvRPiwQSyb1xk2vbmn0+16JW978tYG7uciXxik1VKHCaMbMz39v8Hv9mFWA97b8iVU7sxEaoMb6R653WE5fYd9S+dux83j060wsvvka/Hm2HJsPF2JB/NX1Ls/TWKfOlyPnQgVGdK9emNxsEXh94xFc1yUc13dv26DXqDDWTnq5UG6ErnXgZUqTL2MLYBPwfxBEzeOXw4WY9rH9gsg924XiYL583+ATSbdg9e5cLPSg/W//PW0gHvik7vBy8sXxKKk0ITRAfUWvf6HciGuf39Dg8raLO1u3jPXroMUfp/VXVI/mlDikEz5PP9Usr/3CbbH4x5qsy5b5+6irEBakxpSBMWgd5G93/e3Nx6ANVOPeIZ3qfI284gosWr0XDwzvgrNlBjz+3+q1LL97eDj6x7TGN7/nSOes/4zMFoGvdpzCdV3aoEd0iOw1C0srpTUgf1k4CufLDfj+j3wsHNtDtpWgr+P3N1sAicgNOfqiuqptMH585Hq7bjuFQoG/xnVAxqkLWLXTfk/hPU+NgUqlwKS30nDyMhM5WtLKrSfqvFazpt+Vhj8ACA/2R7C/CuXGpi+BctuA9m4ZAJsr/AFAblFFvWXe/aV6wlDGqSL8a3IfBGtUOJBXgsiQACgUwCs/Ve/l3LlNsNSiBwB7TxfDIlC9BeGLPwOo3pXG2r7Txegf09qu5bPGN7/n4Kn/7QcAxIQHInnmULS/1NJnMNXOvL5oNOOOd7cDAPyUCvxzQq8Gff7TRRcRGqhGaIAaReVGhAXbB1xblSYzth45i+HdIhDMoOkR+KdERG7HumutY3gQsi9cxPi+Orty1kEx6fa+SLq9LwpLK7E/twQnz5dj2rDO0iSMXx67EUBt69aQruFIP36hOT9GnRyN96vxz/E9nfIeUaEBOH5pIezrOoejymJB2xANftpff3f5B4lxmPl5Br6dNQz780rqLe9t3vnF8WxwR37af8bunn4xfbD0+N6PdmDnP25CZEgALpQbMWlF9VZ7M66ve/Humt/ZijoC/B85xdLjnAsVeO+XP/H8pS0bDVW1z7lorF1ayNEOM47kFVdgxEub4a9SYsmk3tLknJ/m3WDX2mjtyTX7pBnoDdku8NT5csxZtQcP3nCVbItGajlcB5CI3E7PdiHorQvFyKvb4ttZw/DmPQMw+8ZuduUcjWCJDAnAjddE4v+Gd7nsDNy4TmEOz29eOKrenTWak7OWHXn33jjEdQrDl38bjG8eGopvZw3H+4kDG/Tc+N7ROPnieFzbMQyqOuqT5GCXF6pmu5zPdS9swqqd2Xj8v7XDFC73n4Btf57DoYKSOls5bX9HaiYoHysswx85ta211i3AjsZ6mS3C7u/QrpPV/ykymi1S+AOAsa9vxanz5Q53xvlqR7Zs+aFfDhc6/mBWnli9D3tP6/HwV7vrLUvNgy2AROR2/FRK/DBnBIDqL7tJ/exb/wDHX2r1GdEtAmnHzuHOuBjc2r893th4FGHBanyRno3nJ8eiS0QwnrylJ/4a1wFtWvlL46k8TY/oEKz++zC78w+O7Ir3txwHAES00uDNu/tf9nU0DpZPAYB7rutot2zNtGGdMb5vOxSVGzHTSdvNeQvbe1WzZaEj6/cVYP2+Atm5R7/OxJo9uXhn6rWwXZHm0+2nYKiyIHmXfAiEsUq+ELeth77IQPrx83jhtj6I7xWFALUKl5sVMPKVX6rrMvpqVFksOH62HG/eM0AWFAFg2se7cPC5cQj0r27Jt1gEMk8Xo1e7UJwtNaBtiEa2jmRhSaXDbSdrusv7N3JNTWoYBkAicksNaQm7kilsH//fIJRWViH80rimt6deCwCYP6aHdE6lVKBnu1C7XSEeHX01Xtt4RHYuPNhfWsvw9mvbo/iiCT8fqr8FxFWeGHcNzpcZ0TpQ3aAxYbf0aYeVvx6Xzda9d0j1Vn7L7uwnTb5ZO3s4+nZoDQDYXMfnrxmvNvzS2DdrCoX8z3P+mKuxfMMRu3K+as2e6ha2WV/uRhsHY/Jswx8AaWs+oHqcoaHKjIc+z0C/mNbo016LDQequ67nrtqDacM6Y8mk3hBW/61SKgBHG6NY/x2YdeNVDuvb8+kU/P7P0YhopcFHaSfwwvqD0GkDkKevRNe2wbBYvfB1Szfhjbv749b+7SGEwM4TF2A0W5D4UfUWjQeeG4sgf8YVZ2MXMBF5lI3zR0qP62oZvBy1SikFPWuOzqmU1a2P4cH++Hz6dXhkdHf8ufQWtA6qnaDRtlXtIs3Lp/SXtbpY83OThYQVCgWW3dmvwRMCAv1VSJl3A4Z2bQMA2LRgJJ6/tXq82V/jOuCj+wfi2Um9pfAHAAYH96BzmyB8PG0Q2rcOdNiqOOfGbrjnuto9omeNchwsHHGXe9tSzl/h4ukjXtqMzYfP4vWNRzH9U/ks9E+2nbTbnq8hu+Ld99HOOq+tu7Qn9Idp1S3OefpKAMDxs+V2E7KWrj8IAHjgk12464N0KfwBQLmB+zk3B0ZqIvIo3SJbYc9TY/DzoULc3Ce62d/vzXsGQAghtUiqlApZ4Hjtrv647Z3f8NDI6sBitNr/1np3irBgf+kL9vruEXYzP4Hq7ll39eXfBqOyymzXEnNTzyi7stYTEZ6/tTduv7aDbGbokkm9sfjbffjbiC74MK16RnSgvx+Sbu+BPu21CA30g59KiffujcOLPx5E0UUT9BUm/OWaSFwdFYL3ttRO0jj54nicKzNgWNLPsnt/JR4f1wMvpxyWjn9ZOAofph2vc4cRT1Pf/suDXtjY6Ne8XBh9Zu1+PLN2f4Ne50yJAev35WPz4bONrgNdGQZAIvI4YcH+uCOuQ4u9n2139KDO4fgxqwABaiV66UKR9exYqFXVrVpVViHkX5P7SOHhui7huKF7BMoNZvzf8M64aDSj9zM/yV43SO2+/yQrlYoGd8P5q2pb+BKHdra7fs91HXFjj0hEhWqkAFjT9ZgwuLYVcFxsNMbFVof8P8+WISYsCAoFpAD42NgeAKrHMm59/EYMSWr4eM1e7UJxwGpNycynx6B1kD9e23AEJrPAjT3aonNEMJ6a0As3x7bD1A/t92km55r1peMJIVWWpgV7csznu4DfeecddOnSBQEBAYiLi8Ovv/7q6ioRkZtbelsfPDiyqzRRRW0VeKYOrl74d9hV1V2mP827ATNv6Ip/3RqLuwZ1xAMjqmcnO1orLTK04Xv+urOafZAXjbumzjLR2gBZsK5vPOdVbVvB308pu9fXWC1LEq0NwAu3xcqec/hf4zCqR1sM6hyGzx64Dv5+SozuGYVnJ/XGurkjsGrGEMy8oSsOPjdOWsz57YRr8Y9beuLD+wcBqF6SaHi3CLx8R18AwMt39MVoB62e1HyqHOyWQ03n0zuBfP3110hMTMQ777yD4cOH4/3338eHH36IAwcOoGPHjvU+v9lWErdYgL1fA7r+QKRz1gQjopYhhMD+vBJ0i2xV7z6s1ota33NdDJ67NVYWcHxBzT1YGH919XaADXAgrwRZeXrcGdfBrnU2K1ePCW+lYeYNXfHkLfJ/P41VFvjXMau5ISqMZmlma9rRc3bLvfTtoMVem0WzbxvQHt//kYeqegbUtQ5So/hi9TZ0NZMlGuPR0Vfjw1+P46Npg/DAJ7tQZqiq/0ke4ucFI9G1bSunviZ3AvHxFsDly5dj+vTp+Nvf/oaePXvi9ddfR0xMDN59913XVmzXSuC7h4DPJgNm+30pich9KRQKxLbX1hv+rAWqVUi6va/PhT9rjWmK6KULxZSBMQ5nise21+LQ8+Pswh+AJoU/AFL4AwCLTYWviQ7B2tkj8POCkfj7qKuQ9exY7H5qDJZP6Yd9S8Y6fL3nJ8eiTbA/nru1NzKfjkfgpd+ZIZdaj+sTGlDbijz3pm7445l4XNclHB8kxqFvBy2+njnE7jmrZgzBdw8Pb9Dru4v6wjNdGfcdcNLMjEYjMjIy8MQTT8jOx8fHY9u2bS6q1SWmS7OjygqAXR8BHQY5LudbE9+IvM78XqXYeLAQ9w3qBOT65rp5fRXV4/l6mBXAZdbGawz7FeWcr4fZINV9UOcw/N9wLZCbga4AFvUBcO7Sos/FQCCAjAfCsftUEdZm5mFkj7a4uU80gv3PIfGBcADngdzz2HhXK2w9ehYT+xtwR5Qab20+ilv76bBqZw66tg3G8bPVO7v0j2mN527tDQDYceICAtUqKPJ2S18JwwKBtbcFAjgp1bHG0IDqMZW25xvrrkEx+NrB0jPNQZR0A6J6tMh7+RKf7QLOy8tD+/bt8dtvv2HYsNrFUpcuXYpPP/0Uhw8ftnuOwWCAwVA7i6qkpAQxMTHN04T86STgxBbnviYREZGHKRjwKKJvXeLU12QXsA+3ANaw7UKwXu7BVlJSEp599tmWqBZw2/vA2jnAWfsgWs0nczsRkc+6aKxCucGM8GB/qBq59mGVxQKlQgHlpe+308UVdmWiQzU4U2KQvl2UCkCnDQRQ/d144aIRFSYL1EoFokIDYKyyoLBMvrRMO22AtH2go/e4EkLt3PF/VM1nA2BERARUKhUKCuTb7RQWFiIqyvEMr8WLF2P+/PnScU0LYLMIbQfc+9/meW0iIvI4QZd+roTtl/2fR87i/n/XLrb891FXYdG4axBRZUZecSVe33gEfx91FXTR1a1jCgDhQiDt2Dn0ahcKtNLAH4B/aSV2nyrGwM5hqDSZoQqrreEIq0lOQPUansUXjThXVr124Lje0ThTWomwIP/L7p6TfM0QNNM3rU/z2QDo7++PuLg4bNiwAbfddpt0fsOGDbj11lsdPkej0UCj8Y5lGoiIyHeNvLotkmcOwQOf7MKicdfg/mGdAVQve9MlIhhv3D3A7jkKhQLXd28rOxcZEiCt1WhrycRe+P1UEWbe0BXGKguu7RgGhQLIuVCB4gqjbPeYzjZh0RqXgWkePhsAAWD+/PlITEzEwIEDMXToUHzwwQfIzs7GQw895OqqERERNashXdtg35Kxje5Obqhpw7tg2vAuduc7tglCR5u2zOu6hGPniQsAqvfUvrV/eyxddxCHz5SisLRxS+JQw/h0ALzrrrtw/vx5PPfcc8jPz0dsbCzWr1+PTp06ubpqREREza65wl9jfTxtkLQzzvXdIzDy6rbYeOAMDp8pxeEzpS6unXfy2VnAzsBZRERERM6RV1yBvaeLMbZ3NBQKBXadvICjZ8owsHMYro4Kqf8FGoHf3z7eAkhERETuQdc6ELrWgdLxoM7hGNQ53IU18m6+u+w8ERERkY9iACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDIBEREZGPYQAkIiIi8jEMgEREREQ+hgGQiIiIyMcwABIRERH5GD9XV8CTCSEAACUlJS6uCRERETVUzfd2zfe4L2IAbILS0lIAQExMjItrQkRERI1VWloKrVbr6mq4hEL4cvxtIovFgry8PISEhEChUDj1tUtKShATE4OcnByEhoY69bWJ97e58f42L97f5sX727zc4f4KIVBaWgqdTgel0jdHw7EFsAmUSiU6dOjQrO8RGhrKf4CaEe9v8+L9bV68v82L97d5ufr++mrLXw3fjL1EREREPowBkIiIiMjHMAC6KY1Gg2eeeQYajcbVVfFKvL/Ni/e3efH+Ni/e3+bF++seOAmEiIiIyMewBZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGABb0NatWzFx4kTodDooFAp89913sutCCCxZsgQ6nQ6BgYEYNWoU9u/fLytjMBgwZ84cREREIDg4GJMmTcLp06db8FO4p6SkJAwaNAghISGIjIzE5MmTcfjwYVkZ3t+meffdd9G3b19p8dahQ4fixx9/lK7z/jpPUlISFAoF5s2bJ53j/W2aJUuWQKFQyH6io6Ol67y/TZebm4t7770Xbdq0QVBQEPr374+MjAzpOu+xmxHUYtavXy/+8Y9/iNWrVwsAYs2aNbLrL774oggJCRGrV68W+/btE3fddZdo166dKCkpkco89NBDon379mLDhg1i9+7d4sYbbxT9+vUTVVVVLfxp3MvYsWPFxx9/LLKyskRmZqYYP3686NixoygrK5PK8P42zdq1a8W6devE4cOHxeHDh8WTTz4p1Gq1yMrKEkLw/jrLzp07RefOnUXfvn3FI488Ip3n/W2aZ555RvTu3Vvk5+dLP4WFhdJ13t+muXDhgujUqZOYNm2a2LFjhzhx4oTYuHGjOHbsmFSG99i9MAC6iG0AtFgsIjo6Wrz44ovSucrKSqHVasV7770nhBCiuLhYqNVqkZycLJXJzc0VSqVSpKSktFjdPUFhYaEAILZs2SKE4P1tLmFhYeLDDz/k/XWS0tJS0b17d7FhwwYxcuRIKQDy/jbdM888I/r16+fwGu9v0y1atEiMGDGizuu8x+6HXcBu4sSJEygoKEB8fLx0TqPRYOTIkdi2bRsAICMjAyaTSVZGp9MhNjZWKkPV9Ho9ACA8PBwA76+zmc1mJCcno7y8HEOHDuX9dZKHH34Y48ePx+jRo2XneX+d4+jRo9DpdOjSpQvuvvtuHD9+HADvrzOsXbsWAwcOxJ133onIyEgMGDAAK1eulK7zHrsfBkA3UVBQAACIioqSnY+KipKuFRQUwN/fH2FhYXWWoepxJvPnz8eIESMQGxsLgPfXWfbt24dWrVpBo9HgoYcewpo1a9CrVy/eXydITk7G7t27kZSUZHeN97fpBg8ejM8++ww//fQTVq5ciYKCAgwbNgznz5/n/XWC48eP491330X37t3x008/4aGHHsLcuXPx2WefAeDvsDvyc3UFSE6hUMiOhRB252w1pIwvmT17Nvbu3Yu0tDS7a7y/TdOjRw9kZmaiuLgYq1evxv33348tW7ZI13l/r0xOTg4eeeQRpKamIiAgoM5yvL9X7uabb5Ye9+nTB0OHDsVVV12FTz/9FEOGDAHA+9sUFosFAwcOxNKlSwEAAwYMwP79+/Huu+/ivvvuk8rxHrsPtgC6iZrZaLb/yyksLJT+xxQdHQ2j0YiioqI6y/i6OXPmYO3atdi8eTM6dOggnef9dQ5/f39069YNAwcORFJSEvr164c33niD97eJMjIyUFhYiLi4OPj5+cHPzw9btmzBm2++CT8/P+n+8P46T3BwMPr06YOjR4/y99cJ2rVrh169esnO9ezZE9nZ2QD4b7A7YgB0E126dEF0dDQ2bNggnTMajdiyZQuGDRsGAIiLi4NarZaVyc/PR1ZWllTGVwkhMHv2bHz77bf4+eef0aVLF9l13t/mIYSAwWDg/W2im266Cfv27UNmZqb0M3DgQEydOhWZmZno2rUr76+TGQwGHDx4EO3atePvrxMMHz7cbumtI0eOoFOnTgD4b7BbcsHEE59VWloq9uzZI/bs2SMAiOXLl4s9e/aIU6dOCSGqp8hrtVrx7bffin379ol77rnH4RT5Dh06iI0bN4rdu3eLv/zlL5wiL4T4+9//LrRarfjll19kyzxcvHhRKsP72zSLFy8WW7duFSdOnBB79+4VTz75pFAqlSI1NVUIwfvrbNazgIXg/W2qBQsWiF9++UUcP35cpKeniwkTJoiQkBBx8uRJIQTvb1Pt3LlT+Pn5iRdeeEEcPXpUfPnllyIoKEh88cUXUhneY/fCANiCNm/eLADY/dx///1CiOpp8s8884yIjo4WGo1G3HDDDWLfvn2y16ioqBCzZ88W4eHhIjAwUEyYMEFkZ2e74NO4F0f3FYD4+OOPpTK8v03zwAMPiE6dOgl/f3/Rtm1bcdNNN0nhTwjeX2ezDYC8v01Ts+acWq0WOp1O3H777WL//v3Sdd7fpvv+++9FbGys0Gg04pprrhEffPCB7DrvsXtRCCGEa9oeiYiIiMgVOAaQiIiIyMcwABIRERH5GAZAIiIiIh/DAEhERETkYxgAiYiIiHwMAyARERGRj2EAJCIiIvIxDIBEREREPoYBkIiIiMjHMAASERER+RgGQCIiIiIfwwBIRERE5GMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDIBEREZGPYQAkIiIi8jEMgEREREQ+hgGQiIiIyMcwABIRERH5GAZAIiIiIh/DAEhERETkYxgAiYiIiHwMAyARERGRj2EAJCIiIvIx/w/kYbbjYElfiAAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "peak_dialog = ieels.PeakFitDialog(file_widget.datasets['Channel_000'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Output" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "areas = []\n", "for p, peak in peak_dialog.peaks['peaks'].items():\n", " area = np.sqrt(2* np.pi)* peak['amplitude'] * np.abs(peak['width'] / np.sqrt(2 *np.log(2))) \n", " areas.append(area)\n", " if 'associated_edge' not in peak:\n", " peak['associated_edge']= ''\n", " print(f\"peak {p}: position: {peak['position']:7.1f}, area: {area:12.3f} associated edge: {peak['associated_edge']}\")\n", "#print(f'\\n M4/M5 peak 2 to peak 1 ratio: {(areas[1])/areas[0]:.2f}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Log Data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "main_dataset.view_metadata()" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": true }, "source": [ "## Save to File\n", "Save the datasets to a file.\n", "\n", "File needs to be closed to be used with other notebooks" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hideCode": false, "hidePrompt": true }, "outputs": [], "source": [ "f = ft.save_dataset(datasets)\n", "f.file.close()" ] }, { "cell_type": "markdown", "metadata": { "hideCode": true, "hidePrompt": true }, "source": [ "## Navigation\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hideCode": true, "hidePrompt": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "hide_code_all_hidden": true, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.7" }, "toc": { "base_numbering": "9", "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "270px" }, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }