{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Write/read SIDpy Dataset via pyNSID\n", "\n", "*Author: Maxim Ziatdinov*\n", "\n", "*Date: September 2020*\n", "\n", "update: \n", "- *Gerd Duscher 01/2021 (compatibility to pyNSID version 0.0.2)*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A fast introduction into how to write SIDpy datasets to NSID formatted HDF5 files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start with standard imports:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Ensure python 3 compatibility:\n", "from __future__ import (absolute_import, division, print_function,\n", " unicode_literals)\n", "\n", "import warnings\n", "\n", "import h5py\n", "import matplotlib.pylab as plt\n", "import numpy as np\n", "\n", "# we will also need a sidpy package\n", "try:\n", " import sidpy\n", "except ModuleNotFoundError:\n", " !pip3 install sidpy\n", " import sidpy\n", "\n", "import pyNSID\n", "\n", "warnings.filterwarnings(\"ignore\", module=\"numpy.core.fromnumeric\")\n", "warnings.filterwarnings(\"ignore\", module=\"pyNSID.io.nsi_reader\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating sidpy.Dataset object(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a simple sidpy Dataset from a numpy array:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 1.60 kB 1.60 kB
Shape (4, 5, 10) (4, 5, 10)
Count 1 Tasks 1 Chunks
Type float64 numpy.ndarray
\n", "
\n", "\n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 10\n", " 5\n", " 4\n", "\n", "
" ], "text/plain": [ "sidpy.Dataset of type UNKNOWN with:\n", " dask.array\n", " data contains: generic (generic)\n", " and Dimensions: \n", "a: generic (generic) of size (4,)\n", "b: generic (generic) of size (5,)\n", "c: generic (generic) of size (10,)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset = sidpy.Dataset.from_array(np.random.random([4, 5, 10]), name='new')\n", "dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's also define the dataset attributes..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "dataset.data_type = 'SPECTRAL_IMAGE'\n", "dataset.units = 'nA'\n", "dataset.quantity = 'Current'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... and set individual dimensions. In the case of spectroscopic datasets, the first two dimensions are typically spatial units (e.g. nm) and the third one can be energy (e.g. $meV$ or $nm^{-1}$)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "dataset.set_dimension(0, sidpy.Dimension(np.arange(dataset.shape[0]), 'x',\n", " units='nm', quantity='Length',\n", " dimension_type='spatial'))\n", "dataset.set_dimension(1, sidpy.Dimension(np.linspace(-2, 2, num=dataset.shape[1], endpoint=True), 'y', \n", " units='nm', quantity='Length',\n", " dimension_type='spatial'))\n", "dataset.set_dimension(2, sidpy.Dimension(np.sin(np.linspace(0, 2 * np.pi, num=dataset.shape[2])), 'bias',\n", " units='mV', quantity='Voltage',\n", " dimension_type='spectral'))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x: Length (nm) of size (4,)\n", "y: Length (nm) of size (5,)\n", "bias: Voltage (mV) of size (10,)\n" ] } ], "source": [ "print(dataset.dim_0)\n", "print(dataset.dim_1)\n", "print(dataset.dim_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Writing sidpy.Dataset object(s) to HDF5 files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load NSID-formatted h5 file:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "hf = h5py.File(\"test.hf5\", 'a')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create a new channel where we are going to save our sidpy dataset:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Channel_000\n" ] } ], "source": [ "hf.create_group('Measurement_000/Channel_000')\n", "print(*hf[\"Measurement_000\"].keys())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's write our sidpy dataset into the newly created channel:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\gduscher\\Anaconda3\\lib\\site-packages\\pyNSID\\io\\hdf_utils.py:351: FutureWarning: validate_h5_dimension may be removed in a future version\n", " warn('validate_h5_dimension may be removed in a future version',\n" ] } ], "source": [ "pyNSID.hdf_io.write_nsid_dataset(dataset, hf['Measurement_000/Channel_000'], main_data_name=\"new_spectrum\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Close h5 file:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "hf.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading sidpy.Dataset object(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Load back the file:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Channel_000\n" ] } ], "source": [ "hf = h5py.File(\"test.hf5\", 'r+')\n", "print(*hf[\"Measurement_000\"].keys())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Find our dataset:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset_hdf5 = pyNSID.io.hdf_utils.find_dataset(hf,'new_spectrum')[0]\n", "dataset_hdf5\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "hf.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the dataset stored in HDF5 format as a sidpy object (Dataset) using NSIDReader:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dr = pyNSID.NSIDReader('test.hf5')\n", "dataset_sid = dr.read()[0]\n", "assert isinstance(dataset_sid, sidpy.Dataset)\n", "dataset_sid.plot()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sidpy.Dataset of type SPECTRAL_IMAGE with:\n", " dask.array\n", " data contains: Current (nA)\n", " and Dimensions: \n", "x: Length (nm) of size (4,)\n", "y: Length (nm) of size (5,)\n", "bias: Voltage (mV) of size (10,)\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Array Chunk
Bytes 1.60 kB 1.60 kB
Shape (4, 5, 10) (4, 5, 10)
Count 1 Tasks 1 Chunks
Type float64 numpy.ndarray
\n", "
\n", "\n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", "\n", " \n", " 10\n", " 5\n", " 4\n", "\n", "
" ], "text/plain": [ "sidpy.Dataset of type SPECTRAL_IMAGE with:\n", " dask.array\n", " data contains: Current (nA)\n", " and Dimensions: \n", "x: Length (nm) of size (4,)\n", "y: Length (nm) of size (5,)\n", "bias: Voltage (mV) of size (10,)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(dataset_sid)\n", "dataset_sid" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Close File" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "dataset_sid.h5_dataset.file.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }