{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reading ns-ALEX data from Photon-HDF5\n", "\n", "*In this notebook we show how to read a ns-ALEX smFRET measurement stored in *\n", "*[Photon-HDF5 format](http://photon-hdf5.readthedocs.org/)*\n", "*using python and a few common scientific libraries (numpy, pytables, matplotlib).*\n", "*Specifically, we show how to load timestamps, detectors and nanotimes arrays*\n", "*and how to plot a TCSPC histogram.* \n", "\n", "*For a µs-ALEX example see [Reading µs-ALEX data from Photon-HDF5](Reading µs-ALEX data from Photon-HDF5.ipynb).*" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import division, print_function # only needed on py2\n", "%matplotlib inline\n", "import numpy as np\n", "import tables\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Utility functions\n", "\n", "Here we define an utility function to print HDF5 file contents:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def print_children(group):\n", " \"\"\"Print all the sub-groups in `group` and leaf-nodes children of `group`.\n", "\n", " Parameters:\n", " group (pytables group): the group to be printed.\n", " \"\"\"\n", " for name, value in group._v_children.items():\n", " if isinstance(value, tables.Group):\n", " content = '(Group)'\n", " else:\n", " content = value.read()\n", " print(name)\n", " print(' Content: %s' % content)\n", " print(' Description: %s\\n' % value._v_title.decode())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Open the data file\n", "\n", "Let assume we have a Photon-HDF5 file at the following location:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "filename = '../data/Pre.hdf5'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can open the file, as a normal HDF5 file" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "h5file = tables.open_file(filename)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The object `h5file` is a pytables file reference. The root group is accessed with `h5file.root`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Print the content\n", "\n", "Let's start by taking a look at the file content:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "provenance\n", " Content: (Group)\n", " Description: Information about the original data file.\n", "\n", "identity\n", " Content: (Group)\n", " Description: Information about the Photon-HDF5 data file.\n", "\n", "sample\n", " Content: (Group)\n", " Description: Information about the measured sample.\n", "\n", "setup\n", " Content: (Group)\n", " Description: Information about the experimental setup.\n", "\n", "photon_data\n", " Content: (Group)\n", " Description: Group containing arrays of photon-data.\n", "\n", "acquisition_duration\n", " Content: 900.0\n", " Description: Measurement duration in seconds.\n", "\n", "user\n", " Content: (Group)\n", " Description: A custom group.\n", "\n", "description\n", " Content: b'A demonstrative smFRET-nsALEX measurement.'\n", " Description: A user-defined comment describing the data file.\n", "\n" ] } ], "source": [ "print_children(h5file.root)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We see the typical Photon-HDF5 structure. In particular the field `description` provides a short description of the measurement and `acquisition_duration` tells that the acquisition lasted 900 seconds.\n", "\n", "As an example, let's take a look at the content of the `sample` group:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num_dyes\n", " Content: 2\n", " Description: Number of different dyes present in the samples.\n", "\n", "buffer_name\n", " Content: b'Tris20 mM Ph 7.8'\n", " Description: A descriptive name for the buffer.\n", "\n", "dye_names\n", " Content: b'ATTO488, ATTO647N'\n", " Description: String containing a comma-separated list of dye or fluorophore names.\n", "\n", "sample_name\n", " Content: b'Doubly-labeled ssDNA partially hybridized to a complementary strand.'\n", " Description: A descriptive name for the sample.\n", "\n" ] } ], "source": [ "print_children(h5file.root.sample)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's define a shortcut to the photon_data group to save some typing later:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "photon_data = h5file.root.photon_data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Reading the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we make sure the file contains the right type of measurement:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'smFRET-nsALEX'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "photon_data.measurement_specs.measurement_type.read().decode()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, tha's what we espect. \n", "\n", "Now we can load all the `photon_data` arrays an their specs:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "timestamps = photon_data.timestamps.read()\n", "timestamps_unit = photon_data.timestamps_specs.timestamps_unit.read()\n", "detectors = photon_data.detectors.read()\n", "nanotimes = photon_data.nanotimes.read()\n", "tcspc_num_bins = photon_data.nanotimes_specs.tcspc_num_bins.read()\n", "tcspc_unit = photon_data.nanotimes_specs.tcspc_unit.read()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of photons: 20120771\n", "Timestamps unit: 5.00e-08 seconds\n", "TCSPC unit: 1.60e-11 seconds\n", "TCSPC number of bins: 4096\n", "Detectors: [ 0 1 127]\n" ] } ], "source": [ "print('Number of photons: %d' % timestamps.size)\n", "print('Timestamps unit: %.2e seconds' % timestamps_unit)\n", "print('TCSPC unit: %.2e seconds' % tcspc_unit)\n", "print('TCSPC number of bins: %d' % tcspc_num_bins)\n", "print('Detectors: %s' % np.unique(detectors))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We may want to check the excitation wavelengths used in the measurement. This information is found in the setup group:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[4.7e-07, 6.35e-07]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file.root.setup.excitation_wavelengths.read()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's load the definitions of donor/acceptor channel and excitation periods:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Donor CH: 1 Acceptor CH: 0\n" ] } ], "source": [ "donor_ch = photon_data.measurement_specs.detectors_specs.spectral_ch1.read()\n", "acceptor_ch = photon_data.measurement_specs.detectors_specs.spectral_ch2.read()\n", "print('Donor CH: %d Acceptor CH: %d' % (donor_ch, acceptor_ch))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Laser repetion rate: 20.0 MHz \n", "Donor period: [1540, 3050] \n", "Acceptor period: [150, 1500]\n" ] } ], "source": [ "laser_rep_rate = photon_data.measurement_specs.laser_repetition_rate.read()\n", "donor_period = photon_data.measurement_specs.alex_excitation_period1.read()\n", "acceptor_period = photon_data.measurement_specs.alex_excitation_period2.read()\n", "print('Laser repetion rate: %5.1f MHz \\nDonor period: %s \\nAcceptor period: %s' % \\\n", " (laser_rep_rate*1e-6, donor_period, acceptor_period))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These numbers define the donor and acceptor excitation periods as shown below:\n", "\n", "$$150 < \\widetilde{t} < 1500 \\qquad \\textrm{donor period}$$\n", "\n", "$$1540 < \\widetilde{t} < 3050 \\qquad \\textrm{acceptor period}$$\n", "\n", "where $\\widetilde{t}$ represent the `nanotimes` array. \n", "\n", "For more information\n", "please refer to the [measurements_specs section](http://photon-hdf5.readthedocs.org/en/latest/phdata.html#measurement-specs)\n", "of the *Reference Documentation*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Plotting the TCSPC histogram\n", "\n", "Let start by separating nanotimes from donor and acceptor channels:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "nanotimes_donor = nanotimes[detectors == donor_ch]\n", "nanotimes_acceptor = nanotimes[detectors == acceptor_ch]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we compute the histograms:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "bins = np.arange(0, tcspc_num_bins + 1)\n", "hist_d, _ = np.histogram(nanotimes_donor, bins=bins)\n", "hist_a, _ = np.histogram(nanotimes_acceptor, bins=bins)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally we plot the TCSPC histogram using *matplotlib*:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10, 4.5))\n", "scale = tcspc_unit*1e9\n", "ax.plot(bins[:-1]*scale, hist_d, color='green', label='donor')\n", "ax.plot(bins[:-1]*scale, hist_a, color='red', label='acceptor')\n", "ax.axvspan(donor_period[0]*scale, donor_period[1]*scale, alpha=0.3, color='green')\n", "ax.axvspan(acceptor_period[0]*scale, acceptor_period[1]*scale, alpha=0.3, color='red')\n", "ax.set_xlabel('TCSPC Nanotime (ns) ')\n", "ax.set_title('TCSPC Histogram')\n", "ax.set_yscale('log')\n", "ax.set_ylim(10)\n", "ax.legend(loc='center left', bbox_to_anchor=(1, 0.5));" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#plt.close('all')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python [default]", "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.5.2" }, "toc": { "colors": { "hover_highlight": "#DAA520", "running_highlight": "#FF0000", "selected_highlight": "#FFD700" }, "moveMenuLeft": true, "nav_menu": { "height": "119px", "width": "252px" }, "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 4, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 1 }