{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Convert ns-ALEX Becker-Hickl SPC/SET files to Photon-HDF5\n", "
\n", "
\n", "\n", "

Summary

\n", "

This [Jupyter notebook](https://jupyter.org/)\n", "will guide you through the conversion of a ns-ALEX data file from **SPC/SET**\n", "to [Photon-HDF5](http://photon-hdf5.org) format. \n", "For more info on how to edit\n", "a jupyter notebook refer to [this example](http://nbviewer.jupyter.org/github/jupyter/notebook/blob/master/docs/source/examples/Notebook/Notebook%20Basics.ipynb#The-Notebook-dashboard).\n", "\n", "

If you are running this notebook online please note that this is a demo service and the\n", "file size of input data files is limited to 35MB.\n", "\n", "

Please send feedback and report any problems to the \n", "[Photon-HDF5 google group](https://groups.google.com/forum/#!forum/photon-hdf5).\n", "\n", "

\n", "\n", "# 1. How to run it?\n", "\n", "The notebook is composed by \"text cells\", such as this paragraph, and \"code cells\"\n", "containing the code to be executed (and identifyied by an `In [ ]` prompt). \n", "To execute a code cell, select it and press SHIFT+ENTER. \n", "To modify an cell, click on it to enter \"edit mode\" (indicated by a green frame), \n", "than type.\n", "\n", "You can run this notebook directly online (for demo purposes), or you can \n", "run it on your on desktop. For a local installation please refer to:\n", "\n", "- [Jupyter Notebook Quick-Start Guide](http://jupyter-notebook-beginner-guide.readthedocs.org) \n", "\n", "
\n", "
\n", "Please run each each code cell using SHIFT+ENTER.\n", "
\n", "\n", "# 2. Prepare the data file\n", "\n", "## 2.1 Upload the data file\n", "\n", "*Note: Skip to section 2.2 if you are running the notebook locally.*\n", "\n", "To start, we need to upload the file we want to convert to Photon-HDF5.\n", "You can use one of the example data files freely available on\n", "[on figshare](http://dx.doi.org/10.6084/m9.figshare.1455963). \n", "\n", "To upload the file switch to the \"Home\" tab in your browser, \n", "click the upload button and select the data file. \n", "Wait until the upload completes than switch back to this notebook.\n", "\n", "## 2.2 Select the file\n", "\n", "Specify the file name of the input data file in the following cell:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "filename = 'dsdna_d7_d17_50_50_1.spc'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next cell will check if the `filename` location is correct:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data file found, you can proceed.\n" ] } ], "source": [ "import os\n", "try: \n", " with open(filename): pass\n", " print('Data file found, you can proceed.')\n", "except IOError:\n", " print('ATTENTION: Data file not found, please check the filename.\\n'\n", " ' (current value \"%s\")' % filename)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In case of file not found, please double check the file name\n", "and that the file has been uploaded." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Load the data\n", "\n", "We start by loading the software:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "phconvert version: 0.6.4\n" ] } ], "source": [ "%matplotlib inline\n", "from IPython.display import display, FileLink\n", "import numpy as np\n", "import phconvert as phc\n", "print('phconvert version: ' + phc.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we load the input file:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " - Loading 'dsdna_d7_d17_50_50_1.spc' ... \n", " [DONE]\n", "\n", "Ignoring arguments `timestamps_units` and `tcspc_range`.\n", "These values were retrived from .SET file.\n" ] } ], "source": [ "d, meta = phc.loader.nsalex_bh(filename,\n", " donor = 4,\n", " acceptor = 6,\n", " laser_repetition_rate = 40e6,\n", " tcspc_range = 60e-9,\n", " timestamps_unit = 60e-9,\n", " alex_period_donor = (1800, 3300),\n", " alex_period_acceptor = (270, 1500),\n", " excitation_wavelengths = (532e-9, 635e-9),\n", " detection_wavelengths = (580e-9, 680e-9),\n", " allow_missing_set = False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we plot the `nanotimes` histogram:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "phc.plotter.alternation_hist(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous plot is the `nanotimes` histogram for the donor and acceptor channel separately.\n", "The shaded areas marks the donor (*green*) and acceptor (*red*) excitation periods.\n", "\n", "If the histogram looks wrong in some aspects (no photons, wrong detectors\n", "assignment, wrong period selection) please go back to the previous cell \n", "which loads the file and change the parameters until the histogram looks correct." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You may also find useful to see how many different detectors are present\n", "and their number of photons. This information is shown in the next cell:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Detector Counts\n", "-------- --------\n", " 0 1\n", " 1 1\n", " 4 3345380\n", " 6 6371466\n" ] } ], "source": [ "detectors = d['photon_data']['detectors']\n", "\n", "print(\"Detector Counts\")\n", "print(\"-------- --------\")\n", "for det, count in zip(*np.unique(detectors, return_counts=True)):\n", " print(\"%8d %8d\" % (det, count))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Metadata\n", "\n", "In the next few cells, we specify some metadata that will be stored \n", "in the Photon-HDF5 file. Please modify these fields to reflect\n", "the content of the data file:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "author = 'John Doe'\n", "author_affiliation = 'Research Institution'\n", "description = 'A demonstrative smFRET-nsALEX measurement.'\n", "sample_name = '50-50 mixture of two FRET samples'\n", "dye_names = 'ATTO550, ATTO647N'\n", "buffer_name = 'TE50'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Conversion\n", "
\n", "
\n", "

Once you finished editing the the previous sections you can proceed with\n", "the actual conversion. To do that, click on the menu *Cells* -> *Run All Below*.\n", "\n", "

After the execution go to **Section 6** to download the Photon-HDF5 file.\n", "

\n", "\n", "The cells below contain the code to convert the input file to Photon-HDF5." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.1 Add metadata" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "d['description'] = description\n", "\n", "d['sample'] = dict(\n", " sample_name=sample_name,\n", " dye_names=dye_names,\n", " buffer_name=buffer_name,\n", " num_dyes = len(dye_names.split(',')))\n", "\n", "d['identity'] = dict(\n", " author=author,\n", " author_affiliation=author_affiliation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.2 Save to Photon-HDF5\n", "\n", "This command saves the new file to disk. If the input data does not follows the Photon-HDF5 specification it returns an error (`Invalid_PhotonHDF5`) printing what violates the specs." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving: dsdna_d7_d17_50_50_1.hdf5\n" ] } ], "source": [ "phc.hdf5.save_photon_hdf5(d, overwrite=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Download the Photon-HDF5\n", "\n", "Click on the link below to download the newly created Photon-HDF5 file:\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "dsdna_d7_d17_50_50_1.hdf5
" ], "text/plain": [ "/Users/anto/src/phconvert/notebooks/dsdna_d7_d17_50_50_1.hdf5" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display(FileLink(d['_data_file'].filename))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can check it's content by using an HDF5 viewer such as [HDFView](https://www.hdfgroup.org/products/java/hdfview/).\n" ] } ], "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }