{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reading µs-ALEX data from Photon-HDF5 with h5py\n", "\n", "*In this notebook we show how to read a µs-ALEX smFRET measurement stored in*\n", "*[Photon-HDF5 format](http://photon-hdf5.readthedocs.org/)*\n", "*using python and a few common scientific libraries (numpy, **h5py**, matplotlib).*\n", "*Specifically, we show how to load timestamps, build an alternation histogram*\n", "*and select photons in the donor and acceptor excitation periods.*\n", "\n", "*See also a [similar notebook](Reading µs-ALEX data from Photon-HDF5.ipynb) using* \n", "*[pytables](http://www.pytables.org/) instead of [h5py](http://www.h5py.org/).*" ] }, { "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 h5py\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": { "collapsed": true }, "outputs": [], "source": [ "def print_children(group):\n", " \"\"\"Print all the sub-groups in `group` and leaf-nodes children of `group`.\n", "\n", " Parameters:\n", " data_file (h5py HDF5 file object): the data file to print\n", " \"\"\"\n", " for name, value in group.items():\n", " if isinstance(value, h5py.Group):\n", " content = '(Group)'\n", " else:\n", " content = value[()]\n", " print(name)\n", " print(' Content: %s' % content)\n", " print(' Description: %s\\n' % value.attrs['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/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can open the file, as a normal HDF5 file" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "h5file = h5py.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": [ "acquisition_duration\n", " Content: 600.0\n", " Description: Measurement duration in seconds.\n", "\n", "description\n", " Content: b'us-ALEX measurement of a doubly-labeled ssDNA sample.'\n", " Description: A user-defined comment describing the data file.\n", "\n", "identity\n", " Content: (Group)\n", " Description: Information about the Photon-HDF5 data file.\n", "\n", "photon_data\n", " Content: (Group)\n", " Description: Group containing arrays of photon-data.\n", "\n", "provenance\n", " Content: (Group)\n", " Description: Information about the original 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" ] } ], "source": [ "print_children(h5file)" ] }, { "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 600 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": [ "buffer_name\n", " Content: b'TE50 + 0.5M GndCl'\n", " Description: A descriptive name for the buffer.\n", "\n", "dye_names\n", " Content: b'Cy3B, ATTO647N'\n", " Description: String containing a comma-separated list of dye or fluorophore names.\n", "\n", "num_dyes\n", " Content: 2\n", " Description: Number of different dyes present in the samples.\n", "\n", "sample_name\n", " Content: b'20dt ssDNA oligo doubly labeled with Cy3B and Atto647N'\n", " Description: A descriptive name for the sample.\n", "\n" ] } ], "source": [ "print_children(h5file['sample'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we 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['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-usALEX'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "photon_data['measurement_specs']['measurement_type'][()].decode()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, tha's what we espect. \n", "\n", "Now we can load all the timestamps (including timestamps unit) and detectors arrays:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "timestamps = photon_data['timestamps'][:]\n", "timestamps_unit = photon_data['timestamps_specs']['timestamps_unit'][()]\n", "detectors = photon_data['detectors'][:]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of photons: 2683962\n", "Timestamps unit: 1.25e-08 seconds\n", "Detectors: [0 1]\n" ] } ], "source": [ "print('Number of photons: %d' % timestamps.size)\n", "print('Timestamps unit: %.2e seconds' % timestamps_unit)\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": [ "array([ 5.32000000e-07, 6.35000000e-07])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h5file['setup']['excitation_wavelengths'][:]" ] }, { "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: 0 Acceptor CH: 1\n" ] } ], "source": [ "donor_ch = photon_data['measurement_specs']['detectors_specs']['spectral_ch1'][()]\n", "acceptor_ch = photon_data['measurement_specs']['detectors_specs']['spectral_ch2'][()]\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": [ "ALEX period: 4000 \n", "Offset: 700 \n", "Donor period: [2180 3900] \n", "Acceptor period: [ 200 1800]\n" ] } ], "source": [ "alex_period = photon_data['measurement_specs']['alex_period'][()]\n", "donor_period = photon_data['measurement_specs']['alex_excitation_period1'][()]\n", "offset = photon_data['measurement_specs']['alex_offset'][()]\n", "acceptor_period = photon_data['measurement_specs']['alex_excitation_period2'][()]\n", "print('ALEX period: %d \\nOffset: %4d \\nDonor period: %s \\nAcceptor period: %s' % \\\n", " (alex_period, offset, donor_period, acceptor_period))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These numbers define the donor and acceptor alternation periods as shown below:\n", "\n", "$$2180 < \\widetilde{t} < 3900 \\qquad \\textrm{donor period}$$\n", "\n", "$$200 < \\widetilde{t} < 1800 \\qquad \\textrm{acceptor period}$$\n", "\n", "where $\\widetilde{t}$ represent the (`timestamps` - `offset`) **MODULO** `alex_period`.\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 alternation histogram\n", "\n", "Let start by separating timestamps from donor and acceptor channels:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "timestamps_donor = timestamps[detectors == donor_ch]\n", "timestamps_acceptor = timestamps[detectors == acceptor_ch]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that the data has been loaded we can plot an alternation histogram using *matplotlib*:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAEXCAYAAAAOZ1X4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xu8VNV99/HPN6BovSvUIpegEZMgiUROiEnEmthGtEkk\n9Ya1QRMrsfp4zU2TtLFtbNVEsWqlLywGTYyXeOXJE5KoaDSpaA6KICIVFSMEARFBY6SAv+ePvQY2\nkzm3mdln5nC+79drv86e39577TWb4fzOWnvPWooIzMzMrL7e1egKmJmZbYucYM3MzArgBGtmZlYA\nJ1gzM7MCOMGamZkVwAnWzMysAE6wZh2QdKqkX7WzfaakU7qzTmbW/JxgrelJekjSGkn9yuLTJX2n\njWNC0u8lvZlbvpa2XSHpF2X7XyXpJ9XULyKOiogbO/E+QtL+1ZzDzHoeJ1hrapKGAWOBAD7bxcMP\nioidc8vlKf4PwH6SvpDO8VHgFOCM+tS6+0nq2+g6mNnWnGCt2U0EZgPTyZJgzSLiLeB04HuS3g3c\nAFwYEUvbO07S91JL+kVJR+XiD0n6u7S+v6RfSlor6VVJt6X4w2n3p1Jr+sQUP13SYkmvSZohaZ9c\nuZ+StCiVdV0qt3SeUyX9WtJkSauBiyW9R9IsSavTuW+WtHuuvCWSvippXmrdT5O0d+rifkPS/ZL2\nqMc1NjMnWGt+E4Gb03KkpL3rUWhEPAjcAcwBXgGmdnDIR4BFQH/gcmCaJFXY71+AXwB7AIOBa9L5\nDkvbS63q2yR9Evg34ARgIPAScCuApP6pfhcBe6Vzf6xCnV4A9gYuAZTK2wd4PzAEuLjsmGOBvwQO\nAD4DzAS+AQwg+31wTgfXwcw6yQnWmpakQ4F3A7dHxBzgeeBvulDEE5Jezy1Hlm1/hCx5/Sg6HpT7\npYi4PiI2ATeSJcRKyX5DqvM+EfF2RLT5cBRwMnBDRDwREevJkulHU7f40cCCiLgrIjYCV5P9IZD3\nu4i4JiI2RsQfImJxRNwXEesjYhVwJfDnZcdcExErImJZev+PRcSTEfE2cDfwoQ6ug5l1khOsNbNT\ngF9ExKvp9Y/oWjfxwRGxe275eWmDpL2A7wFXAf+c70ptw+bklrqYAXausN/XyFqSj0taIOmL7ZS5\nD1mrtVTum8BqYFDa9nJuWwDlXdgv51+k7t5bJS2TtA74IVmLO29Fbv0PFV5Xek9mVgU/GGFNSdKO\nZF2nfSSVkls/YHdJB0XEUzWe4irgZxFxfrrv+T3g72osk4h4hez+bqkFfr+khyNicYXdf0fW2iXt\nvxNZi3oZsJysi7m0TfnXpdOVvf7XFPtARLwmaTxwbW3vyMyq5RasNavxwCZgBDAqLe8n69acmNuv\nj6Qdcsv2HRUs6Wiy+5AXpNDZwHhJn6i10pKOl1RKhGvIEt476fUKYL/c7rcAX5A0Kn0F6V/JumyX\nAP8P+ICk8ekJ4bOAP+vg9LsAbwJrJQ0Cvlrr+zGz6jnBWrM6Bfh+RPw2Il4pLWQtspNzX0u5kKxr\ns7TMypVRemK3tFwlaRfgP4FzIuI1gIhYCXwZmJpazrX4MPCYpDeBGcC5EfFC2nYxcGO6H3xCRNxP\n9pWhO8larO8BJqQ6vQocT/ZA1WqyPzRagfXtnPufgIOBtWQJ+q4a34uZ1UCecN2s+Ul6F9k92JPT\nE9Bm1uTcgjVrUpKOlLR76j7+BtnDU7MbXC0z6yQnWLPm9VGyrya9Svad1fER8YfGVsnMOstdxGZm\nZgVwC9bMzKwAPfZ7sP37949hw4Y15uSvvw4bNjTm3NY9ttsOdu9o7In6ev3t19mwyZ8rg+36bMfu\nOxTz+ZszZ86rETGgkMJtKz02wQ4bNozW1tbGnHzKFBhc/p1/26YsXQp///fdesopv5nC4F39uTJY\num4pf//hYj5/kl7qeC+rB3cRm5mZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBnGDNzMwK4ARr\nZmZWACdYMzOzAjjBmpmZFaDDBCtpiKQHJT0jaYGkc1N8T0n3SXou/dwjd8xFkhZLWiTpyFx8tKT5\nadvVkpTi/STdluKPSRpW/7faRS0tWxYzM7Mu6kwLdiPw5YgYARwCnCVpBHAh8EBEDAceSK9J2yYA\nBwLjgOsk9UllTQFOB4anZVyKnwasiYj9gcnAZXV4b2ZmZg3T4VjEEbEcWJ7W35C0EBgEHAMcnna7\nEXgI+HqK3xoR64EXJS0GxkhaAuwaEbMBJN0EjAdmpmMuTmXdAVwrSdGT59I7//wt65MnN64eZmbW\nEF0a7D913X4IeAzYOyVfgFeAvdP6IGB27rClKbYhrZfHS8e8DBARGyWtBfYim2g6f/5JwCSAoUOH\ndqXqndPZ7uBLL81mWynnRGpmZkmnE6yknYE7gfMiYl26fQpARISkwlubETEVmArQ0tLSfK3bfKu1\nrbiTsJlZr9CpBCtpO7LkenNE3JXCKyQNjIjlkgYCK1N8GTAkd/jgFFuW1svj+WOWSuoL7AasruL9\nNL96JVsnbTOzptZhgk1P+k4DFkbElblNM4BTgEvTz3tz8R9JuhLYh+xhpscjYpOkdZIOIetinghc\nU1bWo8BxwKymuv9a1JPERSTJtsp0Qq6P/GehUfMRm1mP0JkW7MeBzwPzJc1NsW+QJdbbJZ0GvASc\nABARCyTdDjxD9gTyWRGxKR13JjAd2JHs4aaZKT4N+EF6IOo1sqeQe5daEmBbXdNF16H8vE7cZmab\ndeYp4l8BamPzEW0ccwlwSYV4KzCyQvxt4PiO6tIr1St51nLeWhOnW9Vm1gt16Sli6yZFtEjrda5G\nJXwzsx7GCbY36o6kWq9zdKbF29Vj29on79JLYdq0bN33Ws2sCk6w1r2aucXc1rk8XKaZVcEJ1uqn\n2bqPi+giNzPrJCdY65mcGM2syTnBmlXL34k1s3Z4PlgzM7MCOMGamZkVwAnWzMysAE6wZmZmBXCC\nNTMzK4ATrJmZWQH8NR2P0mNmZgVwC9bMzKwATrBmZmYFcII1MzMrQIf3YCXdAHwaWBkRI1PsNuC9\naZfdgdcjYpSkYcBCYFHaNjsizkjHjAamAzsCPwXOjYiQ1A+4CRgNrAZOjIgl9XhzZtuUC3LjL1/p\nCeoruqCNMap70vW64HzotwF+O81DcPZwnXnIaTpwLVkSBCAiTiytS7oCWJvb//mIGFWhnCnA6cBj\nZAl2HDATOA1YExH7S5oAXAacWOF4MyupV7KtpZyuHlue/HpS0qukO/7g8XjXPVqHCTYiHk4t0z8i\nScAJwCfbK0PSQGDXiJidXt8EjCdLsMcAF6dd7wCulaSIiM69BbNtQEsLDF0F67crPmG21crrzD71\nTCTN3Nqs1x8e1qvV+jWdscCKiHguF9tX0lyyVu23IuIRYBCwNLfP0hQj/XwZICI2SloL7AW8WmPd\nzHq+WpJhV/fpjLbKqWdrrjN1zZ+jlvdW9HWxXq3WBHsScEvu9XJgaESsTvdc75F0YI3n2EzSJGAS\nwNChQ+tVrFlz6em/9LvjvF09RzMkYet1qk6wkvoCf032cBIAEbEeWJ/W50h6HjgAWAYMzh0+OMVI\nP4cAS1OZu5E97PRHImIqMBWgpaXFXcjW8zTzPTUnErO6qqUF+xfAsxGxuetX0gDgtYjYJGk/YDjw\nQkS8JmmdpEPIHnKaCFyTDpsBnAI8ChwHzPL9V+sVPIqY2Tatw+/BSrqFLPm9V9JSSaelTRPYunsY\n4DBgXroHewdwRkS8lradCfwXsBh4nuwBJ4BpwF6SFgMXABfW8H7MzMyaQmeeIj6pjfipFWJ3Ane2\nsX8rMLJC/G3g+I7qYWZm1pN4JCczM7MCOMGamZkVwNPVmRXNDzOZ9UpuwZqZmRXACdbMzKwATrBm\nZmYFcII1MzMrgB9yMuuBzh/x8ub1yc8MaWBNrNs08zCbVpETrFk9dPKXX8vYhVt2e+T9RdbIzBrM\nCdasQTqTbPMt1Xppq0y3hM3qywnWrAm0jF3Iqu03sN07KiTRFZGozax9TrBm25DuvDdbz3P5nrJt\ni3pngvXIOtbEutrarFfrtK0kV0t92iunO1vqnTlXZ+rt5G9d0TsTrFkvUEvirVeSrzX51yvpd6b8\nepXjJGwlTrBmts1rVCKtpkV9/oiX2fCuYNq7X/WT5j2cE6yZNURXW73N9qBWverZbO/L6scJ1qze\nfI+/xys66Tmp9g4dDpUo6QZJKyU9nYtdLGmZpLlpOTq37SJJiyUtknRkLj5a0vy07WpJSvF+km5L\n8cckDavvWzQzM+t+nWnBTgeuBW4qi0+OiO/lA5JGABOAA4F9gPslHRARm4ApwOnAY8BPgXHATOA0\nYE1E7C9pAnAZcGLV78isyeQHlDCz3qPDFmxEPAy81snyjgFujYj1EfEisBgYI2kgsGtEzI6IIEvW\n43PH3JjW7wCOKLVuzcx6s5axCzcv1vPUMpvO2ZLmpS7kPVJsEJC/ubA0xQal9fL4VsdExEZgLbBX\npRNKmiSpVVLrqlWraqi6mZlZsapNsFOA/YBRwHLgirrVqB0RMTUiWiKiZcCAAd1xSjMzs6pUlWAj\nYkVEbIqId4DrgTFp0zIg/wWvwSm2LK2Xx7c6RlJfYDdgdTX1MjMzaxZVJdh0T7Xkc0DpCeMZwIT0\nZPC+wHDg8YhYDqyTdEi6vzoRuDd3zClp/ThgVrpPa2Zm1mN1+BSxpFuAw4H+kpYC3wYOlzQKCGAJ\n8CWAiFgg6XbgGWAjcFZ6ghjgTLInkncke3p4ZopPA34gaTHZw1QT6vHGzMzMGqnDBBsRJ1UIT2tn\n/0uASyrEW4GRFeJvA8d3VA8zM7OepJaniM3MzKwNTrBmZmYFcII1MzMrgBOsmZlZAZxgzczMCuAE\na2ZmVgAnWDMzswI4wZqZmRXACdbMzKwATrBmZmYFcII1MzMrgBOsmZlZAZxgzczMCuAEa2ZmVgAn\nWDMzswI4wZqZmRWgwwQr6QZJKyU9nYt9V9KzkuZJulvS7ik+TNIfJM1Ny3/mjhktab6kxZKulqQU\n7yfpthR/TNKw+r9NMzOz7tWZFux0YFxZ7D5gZER8EPgf4KLctucjYlRazsjFpwCnA8PTUirzNGBN\nROwPTAYu6/K7MDMzazIdJtiIeBh4rSz2i4jYmF7OBga3V4akgcCuETE7IgK4CRifNh8D3JjW7wCO\nKLVuzczMeqp63IP9IjAz93rf1D38S0ljU2wQsDS3z9IUK217GSAl7bXAXnWol5mZWcP0reVgSd8E\nNgI3p9ByYGhErJY0GrhH0oE11jF/vknAJIChQ4fWq1gzM7O6q7oFK+lU4NPAyanbl4hYHxGr0/oc\n4HngAGAZW3cjD04x0s8hqcy+wG7A6krnjIipEdESES0DBgyotupmZmaFqyrBShoHfA34bES8lYsP\nkNQnre9H9jDTCxGxHFgn6ZB0f3UicG86bAZwSlo/DphVSthmZmY9VYddxJJuAQ4H+ktaCnyb7Knh\nfsB96Xmk2emJ4cOAf5a0AXgHOCMiSg9InUn2RPKOZPdsS/dtpwE/kLSY7GGqCXV5Z2ZmZg3UYYKN\niJMqhKe1se+dwJ1tbGsFRlaIvw0c31E9zMzMehKP5GRmZlYAJ1gzM2sqki6W9JVG16NWNX1Nx8zM\ntkFSa13Li2ipa3k1kNQ3N1BSodyCNTOzhpP0TUn/I+lXwHtTbJSk2blx7/dI8YckXSbp8XTM2BTf\nQdL307j3T0r6RIqfKmmGpFnAA931npxgzcysodLARBOAUcDRwIfTppuAr6dx7+eTfYulpG9EjAHO\ny8XPAiIiPgCcBNwoaYe07WDguIj480LfTL6C3XUiMzOrXsvYhZvX69t/2xTGAneXxlWQNAPYCdg9\nIn6Z9rkR+HHumLvSzznAsLR+KHANQEQ8K+klssGOAO7LfW20W7gFa2ZmPdH69HMTnWss/r7AulTk\nBGtmZo32MDBe0o6SdgE+Q5YQ1+Qmjfk88Mu2CkgeAU4GkHQAMBRYVEyVO+YuYjMza6iIeELSbcBT\nwErgN2nTKcB/SvoT4AXgCx0UdR0wRdJ8soloTo2I9Y2aAdUJ1szMttaAr9VExCXAJRU2HVJh38Nz\n66+S7sGmkQH/KAlHxHSyoXq7lbuIzczMCuAEa2ZmVgAnWDMzswI4wZqZmRXADzmZ1Vl+QAAz673c\ngjUzMyuAE6yZmfU6ksZLGlHkOTrsIpZ0A/BpYGVEjEyxPYHbyL57tAQ4ISLWpG0XAaeRDV91TkT8\nPMVHk30PaUfgp8C5ERGS+pEN6DwaWA2cGBFL6vYOzcysS/RP9Z2uLr7dPNPV5YwHfgI809kDujrV\nXWdasNOBcWWxC4EHImI42dQ/F6aTjyCbEeHAdMx1kvqkY6YApwPD01Iq8zRgTUTsD0wGLuts5c3M\nbNsg6R5JcyQtkDQpxcZJekLSU5IeSLGdc1PSzZN0bIp/StKjaf8fS9o5xZdIujzt/7ik/SV9DPgs\n8F1JcyW9p4Op8a5SNkfuuV15Tx0m2Ih4GCifgeAYspkNSD/H5+K3RsT6iHgRWAyMkTQQ2DUiZkdE\nkLVYx1co6w7gCDVqXCszM2uUL0bEaKAFOEfS3sD1wLERcRBwfNrvH4C1EfGBNI3dLEn9gW8BfxER\nB5NNOHRBruy1aQq7a4GrIuK/gRnAVyNiVEQ8T/tT420fES0RcUVX3lC1TxHvHRHL0/orwN5pfRAw\nO7ff0hTbkNbL46VjXgaIiI2S1gJ7Aa+WnzT9VTMJYOjQoVVW3czMmtA5kj6X1oeQ/a5/ODXWyE01\n9xdkPaWk+BpJnwZGAL9O7bPtgUdzZd+S+zm5/MSSdqP9qfFuq+YN1fw1nXQfNWotp5PnmgpMBWhp\naemWc5qZWbEkHU6WOD8aEW9JegiYC7yvs0WQzfd6Uhvbo431zqpqqrtqnyJekbp9ST9Xpvgysr88\nSgan2LK0Xh7f6hhJfYHdyB52MjOz3mE3smdx3pL0PrIB/ncADpO0L2x+uBbgPuCs0oHpXuls4OOS\n9k+xndJ0dSUn5n6WWrZvALsARMRauj41XoeqTbAzyKYRIv28NxefIKlfuijDgcdTd/I6SYek+6sT\ny44plXUcMCvdpzUzs97hZ0BfSQuBS8kS5iqybuK7JD3Flm7a7wB7SHo6xT8REauAU4FbJM0jS6L5\n1u8eKX4ucH6K3Qp8VdKTkt5Dloe+m/YbBfxzrW+qM1/TuQU4HOgvaSnZjd9LgdslnQa8BJwAEBEL\nJN1O9tjzRuCsiNiUijqTLV/TmZkWgGnADyQtJnuYanPfupmZdb/u/lpNRKwHjmpj88yyfd9kS6Ms\nH58FfLiNMr4bEV8v2//XZPdt89qdGq+rOkyw7fRpH9HG/hXn9IuIVmBkhfjbbHk6zMzMbJvgsYjN\nzGybFRHDGnVuD5VoZmZWACdYMzOzAjjBmpmZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBnGDN\nzMwK4ARrZmZWACdYMzOzAjjBmpmZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBqk6wkt4raW5u\nWSfpPEkXS1qWix+dO+YiSYslLZJ0ZC4+WtL8tO1qSar1jZmZmTVS1Qk2IhZFxKiIGAWMBt4C7k6b\nJ5e2RcRPASSNACYABwLjgOsk9Un7TwFOB4anZVy19TIzM2sG9eoiPgJ4PiJeamefY4BbI2J9RLwI\nLAbGSBoI7BoRsyMigJuA8XWql5mZWUPUK8FOAG7JvT5b0jxJN0jaI8UGAS/n9lmaYoPSennczMys\nx6o5wUraHvgs8OMUmgLsB4wClgNX1HqO3LkmSWqV1Lpq1ap6FWtmZlZ39WjBHgU8ERErACJiRURs\nioh3gOuBMWm/ZcCQ3HGDU2xZWi+P/5GImBoRLRHRMmDAgDpU3czMrBj1SLAnkeseTvdUSz4HPJ3W\nZwATJPWTtC/Zw0yPR8RyYJ2kQ9LTwxOBe+tQLzMzs4bpW8vBknYC/hL4Ui58uaRRQABLStsiYoGk\n24FngI3AWRGxKR1zJjAd2BGYmRYzM7Meq6YEGxG/B/Yqi32+nf0vAS6pEG8FRtZSFzMzs2bikZzM\nzMwK4ARrZmZWACdYMzOzAjjBmpmZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBnGDNzMwK4ARr\nZmZWACdYMzOzAjjBmpmZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBnGDNzMwKUFOClbRE0nxJ\ncyW1ptieku6T9Fz6uUdu/4skLZa0SNKRufjoVM5iSVdLUi31MjMza7R6tGA/ERGjIqIlvb4QeCAi\nhgMPpNdIGgFMAA4ExgHXSeqTjpkCnA4MT8u4OtTLzMysYYroIj4GuDGt3wiMz8VvjYj1EfEisBgY\nI2kgsGtEzI6IAG7KHWNmZtYj1ZpgA7hf0hxJk1Js74hYntZfAfZO64OAl3PHLk2xQWm9PP5HJE2S\n1CqpddWqVTVW3czMrDh9azz+0IhYJulPgfskPZvfGBEhKWo8R768qcBUgJaWlrqVa2ZmVm81tWAj\nYln6uRK4GxgDrEjdvqSfK9Puy4AhucMHp9iytF4eNzMz67GqTrCSdpK0S2kd+BTwNDADOCXtdgpw\nb1qfAUyQ1E/SvmQPMz2eupPXSTokPT08MXeMmZlZj1RLF/HewN3pGzV9gR9FxM8k/Qa4XdJpwEvA\nCQARsUDS7cAzwEbgrIjYlMo6E5gO7AjMTIuZmVmPVXWCjYgXgIMqxFcDR7RxzCXAJRXircDIauvS\nVS1jF25eb33k/d11WjMz60U8kpOZmVkBnGDNzMwK4ARrZmZWACdYMzOzAjjBmpmZFcAJ1szMrABO\nsGZmZgWodSxiM2Pr71abmYFbsGZmZoVwgjUzMyuAE6yZmVkBnGDNzMwK4ARrZmZWACdYMzOzAjjB\nmpmZFcAJ1szMrABVJ1hJQyQ9KOkZSQsknZviF0taJmluWo7OHXORpMWSFkk6MhcfLWl+2na1JNX2\ntszMzBqrlpGcNgJfjognJO0CzJF0X9o2OSK+l99Z0ghgAnAgsA9wv6QDImITMAU4HXgM+CkwDphZ\nQ93MzMwaquoWbEQsj4gn0vobwEJgUDuHHAPcGhHrI+JFYDEwRtJAYNeImB0RAdwEjK+2XmZmZs2g\nLvdgJQ0DPkTWAgU4W9I8STdI2iPFBgEv5w5bmmKD0np5vNJ5JklqldS6atWqelTdzMysEDUnWEk7\nA3cC50XEOrLu3v2AUcBy4Ipaz1ESEVMjoiUiWgYMGFCvYs3MzOqupgQraTuy5HpzRNwFEBErImJT\nRLwDXA+MSbsvA4bkDh+cYsvSennczMysx6rlKWIB04CFEXFlLj4wt9vngKfT+gxggqR+kvYFhgOP\nR8RyYJ2kQ1KZE4F7q62XmZlZM6jlKeKPA58H5kuam2LfAE6SNAoIYAnwJYCIWCDpduAZsieQz0pP\nEAOcCUwHdiR7ethPEJuZWY9WdYKNiF8Blb6v+tN2jrkEuKRCvBUYWW1dzMzMmo1HcjIzMyuAE6yZ\nmVkBnGDNzMwK4ARrZmZWACdYMzOzAjjBmpmZFaCW78FuE1rGLty83vrI+xtYEzMz25b0+gRrVq38\nH2dmZuWcYHM6+wuz9a7+VZ/j/ANfrhifvGBIxXhbx9ayf73q0N7xnTl3d75nM7PupmwK1p6npaUl\nWltbqzv2/J1qOvexT21g5S6VBrGybcWfvhHcedB23XrOVdtvYLt3/Lky2PCuYMD/tv35a538+6rL\nljQnIlqqLsA6zQ85mZmZFcAJ1szMrABOsGZmZgVwgjUzMyuAE6yZmVkBnGDNzMwK4ARrZmZWgKZJ\nsJLGSVokabGkCxtdHzMzs1o0RYKV1Af4D+AoYARwkqQRja2VmZlZ9ZoiwQJjgMUR8UJE/C9wK3BM\ng+tkZmZWtWYZi3gQkB/kdinwkfKdJE0CJqWXb0paVOX5+gOvVnksc6o9sGM11atAvbNeD26o5eje\nec2q53qV+S1tf/50lWqp17urPM66qFkSbKdExFRgaq3lSGptxrE4Xa+uadZ6QfPWzfXqGtfLatEs\nXcTLgPzUJ4NTzMzMrEdqlgT7G2C4pH0lbQ9MAGY0uE5mZmZVa4ou4ojYKOn/AD8H+gA3RMSCAk9Z\nczdzQVyvrmnWekHz1s316hrXy6rWY+eDNTMza2bN0kVsZma2TXGCNTMzK0CvS7CNHpJR0hJJ8yXN\nldSaYntKuk/Sc+nnHrn9L0p1XSTpyDrW4wZJKyU9nYt1uR6SRqf3s1jS1ZJUQL0ulrQsXbO5ko5u\nQL2GSHpQ0jOSFkg6N8Ubes3aqVdDr5mkHSQ9LumpVK9/SvFGX6+26tUMn7E+kp6U9JP0uuH/H61G\nEdFrFrIHqJ4H9gO2B54CRnRzHZYA/ctilwMXpvULgcvS+ohUx37AvqnufepUj8OAg4Gna6kH8Dhw\nCCBgJnBUAfW6GPhKhX27s14DgYPT+i7A/6TzN/SatVOvhl6zVMbOaX074LFUdqOvV1v1aobP2AXA\nj4CfNMv/Ry+1Lb2tBdusQzIeA9yY1m8Exufit0bE+oh4EVhM9h5qFhEPA6/VUg9JA4FdI2J2ZP+7\nb8odU896taU767U8Ip5I628AC8lGIGvoNWunXm3prnpFRLyZXm6XlqDx16uterWlW+olaTDwV8B/\nlZ27of8frTa9LcFWGpKxvV9GRQjgfklzlA39CLB3RCxP668Ae6f17q5vV+sxKK13R/3OljQvdSGX\nusoaUi9Jw4APkbV+muaaldULGnzNUpfnXGAlcF9ENMX1aqNe0NjrdRXwNeCdXKzh18pq09sSbDM4\nNCJGkc0cdJakw/Ib01+eDf/uVLPUI5lC1q0/ClgOXNGoikjaGbgTOC8i1uW3NfKaVahXw69ZRGxK\nn/XBZC2skWXbG3K92qhXw66XpE8DKyOizWHOm+z/o3VSb0uwDR+SMSKWpZ8rgbvJunxXpO4d0s+V\naffurm9X67EsrRdav4hYkX4pvgNcz5Zu8m6tl6TtyJLYzRFxVwo3/JpVqlezXLNUl9eBB4FxNMH1\nqlSvBl+nH63SAAAIkElEQVSvjwOflbSE7LbVJyX9kCa6Vlad3pZgGzoko6SdJO1SWgc+BTyd6nBK\n2u0U4N60PgOYIKmfpH2B4WQPMRSlS/VI3VfrJB2SnlacmDumbkq/ZJLPkV2zbq1XKmcasDAirsxt\naug1a6tejb5mkgZI2j2t7wj8JfAsjb9eFevVyOsVERdFxOCIGEb2O2lWRPwtTfr/0bqgXk9L9ZQF\nOJrsScvngW9287n3I3v67ylgQen8wF7AA8BzwP3Anrljvpnquog6PhEI3ELWFbaB7F7NadXUA2gh\n+2X0PHAtaXSwOtfrB8B8YB7ZL5eBDajXoWRddPOAuWk5utHXrJ16NfSaAR8Enkznfxr4x2o/691U\nr4Z/xlKZh7PlKeKG/3/0UtvioRLNzMwK0Nu6iM3MzLqFE6yZmVkBnGDNzMwK4ARrZmZWACdYMzOz\nAjjBmpmZFcAJdhslaUdJv0zjrg6T9De5bS2Sri7w3IdL+lhR5RcpfXn/fmVTlp0oaayyac3mpoEJ\nulLWeZL+JPf6/twYt+X7LpH0SFlsrraetu9QZVOtPZuWSblt+enWnpN0l6QRXazvxZK+0pVjiiRp\nH0l3dPGYhyS1FFUns65wgt12fRG4KyI2AcOAzQk2Iloj4pwCz3040CMTLNlg+UTEqIi4DTgZ+Lf0\n+g9dLOs84E9yr38AnNnO/rtIGgIg6f35DZL+jGwqszMi4n1kA0x8SdJf5XabnOo5HLgNmCVpQBfr\n3BQk9Y2I30XEcY2ui1m1nGC3XSezZZi0S4GxqXVzfmphliZ1vljSjZIekfSSpL+WdLmySZt/lsa5\nLU3k/EtlswD9PDdG6jnKJvueJ+lWZTO6nAGcn843VtJnJD2mbDLp+yXt3cVzL8nFH5e0f4ofL+lp\nZZNnP9yVi6NsMut7Ur1nS/qgpD8Ffgh8ONX9S8AJwL9IulnSQEkPl1qWksamsj4l6VFJT0j6saSd\nJZ0D7AM8KOnBdNoZwEntVOt24MS0fhLZqFYlZwHTY8vUdK+Szb5yYaWC0h8HvyD3h1XuvZ8u6Tfp\nut2Zb2Xn9nlP+jeYk/593pfi90qamNa/JOnmtt5Mak3+e+56jUnxnZTNWPN4+kwck+KnSpohaRbw\ngLKel6fTth0kfT99Bp6U9IkU3zF97hZKuhvoUi+DWaEaPZSUl/ovZJPJv5J7fThp+LXy12QTTf+K\nbF7Mg4C3SEOvkU1GMD5t+29gQIqfCNyQ1n8H9Evru+fK/ErufHvA5lHD/g64orPnTutL2DKs5MRc\n3ecDg/Ln7sI1ugb4dlr/JDC3jWs1HTgurX85V48+ZBOc9wceBnZK8a+zZfi9JUD/svM+B+xVoT5L\ngPcC/51eP0k2sfbT6fVdwDFlx+wGvFbpmqfYecCUCufaK7f+HeDs8jLIhugbntY/QjY+LmRTpi0G\nxpINObpnefm5sh8Crk/rh+Xey78Cf1v6d0vl7AScSjY85p5p27DcMV9my2fufcBvgR3IJikvxT8I\nbARaGv1/0IuXiKAvti3qD7zehf1nRsQGSfPJEsfPUnw+2S+59wIjgfskkfYpzVM5D7hZ0j3APW2U\nPxi4LbV6twde7MK5S27J/Zyc1n8NTJd0O1kC6opDgWMBImKWpL0k7drBMb8Bbkgt63siYq6kPydL\nhL9O12Z74NF2ylhJ1rJdXWHbamCNpAlkE6e/1ZU3VIHaiI+U9B2y5LYz8POtDsqmvvsY8OP0ngD6\nQTZLj6R/JJuF5nMR8VoHdbglHfewpF2VDbT/KbLZY0r3e3cAhqb1+9oo81CyP4qIiGclvQQcQJa4\nr07xeZLmdVAfs27jBLtt+gPZL63OWg8QEe9I2hARpQGq3yH7jAhYEBEfrXDsX5H9kvsM8E1JH6iw\nzzXAlRExQ9LhZC2lzp67JMrXI+IMSR9JdZgjaXREbE5cki5J24hs/s+apCRxWCpzuqQrgTVkSaG9\nrt+8Hcj+fdpyG/AfZK25vGeA0Ww9O8poskkj2vIhoLVCfDpZ78BTkk4la7XnvQt4vZ1r9gGyPwb2\naefcJeWDnQfZ5+nYiFiU35D+LX/fiTLNegTfg90GRcQaoI+kUpJ9g6w7s1qLgAGSPgrZ/KOSDpT0\nLmBIRDxI1jW6G1mLqPx8u7FlXspTqM6JuZ+Ppnq8JyIei4h/BFax9RyZRMQ3I3vop1KieITsPjUp\n6b8aZROol5P0bmBFRFwP/BdwMDAb+HjuvvBOkg5Ih2x1HZQ1B/+MrDu4LXcDl1PWqiQlXUmjUll7\nAZelfSvV9ViyluItFTbvAixPLfGTyzem6/CipONL9ZZ0UFofAxxFlry/omy6tPacmI47FFgbEWvT\nezs7XQ8kfaiDMmDrf68DyFq8i8i65/8mxUeSdRObNQW3YLddvyDrVrufrBt3k6SnyFovT3aloIj4\nX0nHAVdL2o3sc3MV2b2zH6aYgKsj4nVJ/xe4Iz28cjZZi/XHktYAs4COfilXskfq/lvPlgeFvitp\neDr3A2TTAHbWxWTdvfPIumI7k/gPB74qaQPwJjAxIlalVuAtkvql/b5Fdm2mAj+T9LuI+ARZi3N2\nRGxs6wQR8QZZ4iTXPUtELJf0t8D1yuYUFnBVRPzf3OHnp312Ipuy7JMRsarCaf4BeIzsj5LHqPzH\n18nAFEnfIrtHfqukZ8kmI/9CRPxO0pfJruEncz0P5d6W9GQq44sp9i9kn5956Y+0F4FPt3VNkutS\nfeaT3Wc9NSLWS5oCfF/SQrJu9TkdlGPWbTxd3TZK0sHA+RHx+UbXpVaSlpA9uPJqo+tSC0n/DsyI\niAcaXZfuIOkhsoemKnVTm23z3EW8jYrs6xwPSurT6LrYZk/3luRqZm7BmlmNJP0H8PGy8L9HxPcb\nUR+zZuEEa2ZmVgB3EZuZmRXACdbMzKwATrBmZmYFcII1MzMrwP8HHG2i15e23ywAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.hist((timestamps_acceptor - offset) % alex_period, bins=100, alpha=0.8, color='red', label='donor')\n", "ax.hist((timestamps_donor - offset) % alex_period, bins=100, alpha=0.8, color='green', label='acceptor')\n", "ax.axvspan(donor_period[0], donor_period[1], alpha=0.3, color='green')\n", "ax.axvspan(acceptor_period[0], acceptor_period[1], alpha=0.3, color='red')\n", "ax.set_xlabel('(timestamps - offset) MOD alex_period')\n", "ax.set_title('ALEX histogram')\n", "ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), frameon=False);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Timestamps in different excitation periods\n", "\n", "We conclude by showing, as an example, how to create arrays of timestamps containing only donor or acceptor exitation photons.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "timestamps_mod = (timestamps - offset) % alex_period\n", "donor_excitation = (timestamps_mod < donor_period[1])*(timestamps_mod > donor_period[0])\n", "acceptor_excitation = (timestamps_mod < acceptor_period[1])*(timestamps_mod > acceptor_period[0])\n", "timestamps_Dex = timestamps[donor_excitation]\n", "timestamps_Aex = timestamps[acceptor_excitation]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcUAAAEXCAYAAADcN1+gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm8HFWZ//HPlwRDZJMlxpBEAhJHA0qQGPEnKMIIEXWC\nI0sYlDAigYEBF9QBdQQdM6OOyjIOjEGQgAhkQCDjiGwBcSMQJGRhkUiCEAIJEDYVhoTn98d5WirN\nXfqu3cn9vl+vet3qU3Wqnq7u20+fU6erFBGYmZkZbNTsAMzMzFqFk6KZmVlyUjQzM0tOimZmZslJ\n0czMLDkpmpmZJSdFA0DSkZJ+2cHyayRN7c+YmkHSEEl3SxrRw+0sk/TXvRVXN2PYW9LD/bi/5yTt\n2I16YySFpMF9EVc7+7xA0tcaWG+4pHskDemPuKz5nBRbhKSbJa2u/+fr6J83P0j+mB9Gtenzuezb\nkq6rW/8MST/pTnwR8f6ImNnA8whJO3VnHy1iGnBLRKxodiCNfnC3iojYLCIeaHYcvSkiHgNuorwv\nbABwUmwBksYAewEB/E0Xq++aH0a16ZtZ/s/AjpL+PvfxTmAqcGzvRN3/+qklcSxwUT/sZ4PRny28\nJrkYOKbZQVj/cFJsDUcAtwIXUBJXj0XEn4CjgW9J2h44Hzg5IjrsTpP0rWyxLpX0/kr5zZI+kfM7\nSfq5pKclPS7psiy/JVe/K1uth2b50ZKWSHpS0mxJ21W2u5+k+3JbZ+d2a/s5UtKvJJ0u6QngNElv\nkDRH0hO574slvaayvWWSPidpQbaiz8susGskPSvpBklbtfPcXw/sCMytlB2Q3anPSlou6bOVZR+U\nNF/SU5J+Lemt7Wx3I0knS/p9xj1L0taV5Xtm/ackPZTPexpwOPD5PJb/k+tuJ+kKSavyNTqxsp2h\n2bpcLelu4O2dvNYh6URJD+Sx/HdJG1WWfzy7DldLujbfR9W6x0u6H7i/UrZTzm8p6cKM80FJX6pt\nW9KgfJ89LukB4AN1cR2ZMT2bz/HwduIfkr0fj+R0hrKnRdl1LOkkSSslrVB+QWxjO4skfajyeOOM\nbbcsmkv5grl9W/VtAxMRnpo8AUuA44DdgReB4ZVlFwBfa6deADt1su3vAY9TuoDUwXpH5r6PBgYB\n/wA8UqsD3Ax8IucvAb5I+VK1CbBnezEB++T+3wYMAf6D0j0JsC3wDPC3wGDgkxnDJyoxrQFOyOVD\ngZ2A9+W2hgG3AGdU9reM8gVjODASWAn8FtgtY50DnNrOMfgAsLiubAWwV85vBbwt53fLbb8jj9fU\n3PeQShx/nfOfzJhGZdzfAy7JZdsDzwKHARsD2wDj23rt83jfAXwZeBUlgT8A7J/Lvw78AtgaGA0s\nAh7u4DWPfF9sDbwe+F3l2E+mvC/fnMf+S8Cv6+pen3WH1r/2wIXA1cDmwJjc9lG57Fjg3oxx64wh\ncj+b5nvir3LdEcDO7cT/1Tyur833wq+Bf8lle1PeO1/N43oA8Cdgq/pjC3weuKyy3cnAwrp9LQD+\nptmfFZ76fmp6AAN9AvakJIJt8/G9wKcry9f5YKyrG/kB8lRl2r9unY/mekd3EseRwJLK41dnvdfl\n45srH5gXAjOAUe3EVE2K5wHfrDzeLJ/vGEoL+TeVZQIeYt2k+IdO4j4QuLPyeBlweOXxFcA5lccn\nAFe1s63DgVvryv5A6Trboq78nNoHcKXsPuA9lThqSfEeYN/KeiPyGAwGTgGubCeedV57SgL+Q906\npwA/yPkHgEmVZdPoPClW1z8OuDHnryGTWD7eiJJUtq/U3aet157yJeH/gHGVZccAN+f8HODYyrL9\nWDcpPgV8hEy2HcT/e+CAyuP9gWU5vzfwZ2BwZflKYI/6YwtsR/liskU+vhz4fN2+fgUc0ej/taf1\nd3L3afNNBa6LiMfz8Y/oWhfq2yLiNZXp2toCSdsA3wLOAL5a7WZsx6O1mSjdr1CSWL3PUxLYbZIW\nS/p4B9vcDniwst3ngCcorbjtKEmwtiyA+u7dh6oPsiv00uzKfAb4IaXFWfVYZf7PbTxu6zkBrKa0\nbKo+QmllPJhdu+/M8u2Bk7LL8ylJT1FaPtvxStsDV1bWuwdYS2nNjqZ8uDdie2C7un1+IbcDdceT\nynHvQP36tfi3B86s7OdJyms+sp26VdtSWmfV/T9YqdtunBHxR+BQSmtyhaT/lfSmdvazznurLn6A\nJyJiTeXxn2jjtY+IRyhJ7yP5P/J+ynnEqs0pydo2cE6KTSRpKHAI8B5Jj0p6FPg0sKukXXthF2cA\nP4uIT1O6Gb/VC9skIh6NiKMjYjtKC+BstT/i9BHKBywAkjaldBEup3RNjqosU/VxbXd1j/81y94S\nEVtQWsLqwdOpWgDsoMrAkYi4PSImU7rorgJm5aKHgOl1X0heHRGXtLHdh4D31627SUQsz2VvaCee\n+uf+ELC0bjubR8QBuXwFJcnWvL6B51y//iOVfR1Tt6+hEfHrDuKreZzSEq6eg3s95TXvNM6IuDYi\n3kdpUd8LnNvOftZ5b9XF31UzKe+lgym9F7VYawOJdgLu6ua2bT3ipNhcB1JaDOOA8Tm9mXJe6IjK\neoMkbVKZXtXZhiUdQDn39pksOgE4UNJ7exq0pIMl1ZLXasqH40v5+DHKua6aS4C/lzQ+B0H8KzA3\nIpYB/wu8RdKB+cFzPPC6Tna/OfAc8LSkkcDnevp8aqIMQloCTASQ9CpJh0vaMiJepHRV157nucCx\nkt6hYlNJH5BU39IE+C9gem2ghqRhkibnsouBv5Z0iKTBkraRND6X1R/L24BnJf1TDqoZJGkXSbUB\nNbOAUyRtla/PCQ087c/l+qMp5z4vq8R8iqSdM+YtJR3cwPaIiLUZy3RJm+fz/gylVV+L80RJo1QG\nPZ1cq5s9AZPzy9MLlNf6Jdp2CfClPJ7bUs61/rCddTtzFeW89ycppweqJlK6ZRtpedt6zkmxuaZS\nzgf9IVtfj0bEo8B3gcMrLZaTKd1+tWlOZRu1kZ616Yz8YP4v4MSIeBIgIlYCJwEzsoXaE28H5kp6\nDpgNfDJe/n3aacDM7HY7JCJuoPw85ApKC+ENwJSM6XHKN/NvUrpUxwHzKB+G7fkK5cPraUpS/XEP\nn0u97wEfqzz+GLAsu2qPpZx3JCLmUQYlfZfyxWAJ5RxoW86kHKfrJD1LGRzyjtzOHyjdsydRuijn\nA7VegvOAcXksr8pk80HKl6ellBbZ94Etc/2vULoQlwLX0dhPS66mDN6ZTzme52VcVwLfAC7N576I\n0q3YqBOAP1LOc/6Sclrg/Fx2LnAtpeX1W9Z9DTeiJNBHKMfjPZRBX235GuX9sgBYmNvq1u86I+LP\nlPfoDrzyPXU45f/JBoDayEKzplMZsv8wZaDMTU2KYQhwJ2VgTNN/wN+XJAUwNiKWNDuWViDpy8Ab\nI+KjlbLXAj8HdouI55sWnPWbDf1Ht9biJO1P+R3YnyldoaK0pJoiIl6gtFhtAFH53ehRrNtLUOth\neXNTgrKmcPepNds7KaMvHwc+BByYXVlm/ULS0ZSBRddExC2drW8bNnefmpmZJbcUzczM0np7TnHb\nbbeNMWPGNDsMM7P1yh133PF4RAxrdhytqtOkKGkTyg+/h+T6l0fEqZJOowxJX5WrfiEifpp1TqGc\ntF5L+VnAtVm+O+XySkOBn1KG8keO+LuQcu3PJ4BD83ds7RozZgzz5s3r0pM1MxvoJPn3lh1opPv0\nBco1Dnel/D5qkqQ9ctnpETE+p1pCHEf5HdrOwCTK1U4G5frnUBLp2JwmZflRwOqI2Ak4nfL7KDMz\ns37VaVKM4rl8uHFOHY3OmQxcGhEvRMRS8gohKncy3yIibs1rXF5IuaJLrU7tBraXA/vmJb/MzMz6\nTUMDbfJyUvMpV5m/PiJq95s7QeW+defr5XvUjWTdi/0+nGUjWfdiz7XyderkBXyfplwf08zMrN80\nlBQjYm1EjKdcrHmipF0oXaE7UrpUVwDf7rMok6RpkuZJmrdq1arOK5iZmXVBl36SERFPUW4IOiki\nHstk+RLlWoYTc7XlrHsF/FFZtpx174BQK1+nTl7vc0vKgJv6/c+IiAkRMWHYMA+eMjOz3tVpUswr\n0L8m54dS7rxwb54jrPkw5YLBUC58PEXSEEk7UAbU3JbXkXxG0h55vvAIysWIa3Vq9xA8CJgTvqqA\nmZn1s0Z+pziCcteDQZQkOisifiLporzFTVDuMn4MQEQsljQLuBtYAxyfV/eHcmfvCyg/ybgmJyhX\n5r9I0hLKlfGn9MJzMzMz65L19jJvEyZMCP9O0cysayTdERETmh1Hq/Jl3szMzNJ6e5k3s4Fqwoy2\nv+TPm+aeE7OeclI0G6CcXM1eyUnRrMW1l7yava22ttkqCdUJ37rLSdFsA9HXiaA3k19722rFBGsD\ni5OiWQvqixZdd7QXR1fLoWdJrpFk2dNj1siXikaSeSN121vHms8/yTBrQa2SFK25+iJh+icZHfNP\nMszMzJKTopmZWXJSNDMzS06KZmZmyUnRzMwsOSmamZklJ0UzM7PkpGhmZpacFM3MzJKTopmZWXJS\nNDMzS06KZmZmyUnRzMwsOSmamZklJ0UzM7PUaVKUtImk2yTdJWmxpK9k+daSrpd0f/7dqlLnFElL\nJN0naf9K+e6SFuaysyQpy4dIuizL50oa0/tP1czMrGONtBRfAPaJiF2B8cAkSXsAJwM3RsRY4MZ8\njKRxwBRgZ2AScLakQbmtc4CjgbE5Tcryo4DVEbETcDrwjV54bmZmZl3SaVKM4rl8uHFOAUwGZmb5\nTODAnJ8MXBoRL0TEUmAJMFHSCGCLiLg1IgK4sK5ObVuXA/vWWpFmZmb9paFzipIGSZoPrASuj4i5\nwPCIWJGrPAoMz/mRwEOV6g9n2cicry9fp05ErAGeBrZpI45pkuZJmrdq1apGQjczM2tYQ0kxItZG\nxHhgFKXVt0vd8qC0HvtURMyIiAkRMWHYsGF9vTszMxtgujT6NCKeAm6inAt8LLtEyb8rc7XlwOhK\ntVFZtjzn68vXqSNpMLAl8ERXYjMzM+upRkafDpP0mpwfCrwPuBeYDUzN1aYCV+f8bGBKjijdgTKg\n5rbsan1G0h55vvCIujq1bR0EzMnWp5mZWb8Z3MA6I4CZOYJ0I2BWRPxE0m+AWZKOAh4EDgGIiMWS\nZgF3A2uA4yNibW7rOOACYChwTU4A5wEXSVoCPEkZvWpmZtavOk2KEbEA2K2N8ieAfdupMx2Y3kb5\nPGCXNsqfBw5uIF4zM7M+4yvamJmZJSdFMzOz5KRoZmaWnBTNzMySk6KZmVlyUjQzM0tOimZmZslJ\n0czMLDkpmpmZJSdFMzOz5KRoZmaWnBTNzMySk6KZmVlyUjQzM0tOimZmZslJ0czMLDkpmpmZJSdF\nMzOz5KRoZmaWnBTNzMySk6KZmVnqNClKGi3pJkl3S1os6ZNZfpqk5ZLm53RApc4pkpZIuk/S/pXy\n3SUtzGVnSVKWD5F0WZbPlTSm95+qmZlZxxppKa4BToqIccAewPGSxuWy0yNifE4/BchlU4CdgUnA\n2ZIG5frnAEcDY3OalOVHAasjYifgdOAbPX9qZmZmXdNpUoyIFRHx25x/FrgHGNlBlcnApRHxQkQs\nBZYAEyWNALaIiFsjIoALgQMrdWbm/OXAvrVWpJmZWX/p0jnF7NbcDZibRSdIWiDpfElbZdlI4KFK\ntYezbGTO15evUyci1gBPA9t0JTYzM7OeajgpStoMuAL4VEQ8Q+kK3REYD6wAvt0nEa4bwzRJ8yTN\nW7VqVV/vzszMBpiGkqKkjSkJ8eKI+DFARDwWEWsj4iXgXGBirr4cGF2pPirLlud8ffk6dSQNBrYE\nnqiPIyJmRMSEiJgwbNiwxp6hmZlZgxoZfSrgPOCeiPhOpXxEZbUPA4tyfjYwJUeU7kAZUHNbRKwA\nnpG0R27zCODqSp2pOX8QMCfPO5qZmfWbwQ2s8y7gY8BCSfOz7AvAYZLGAwEsA44BiIjFkmYBd1NG\nrh4fEWuz3nHABcBQ4JqcoCTdiyQtAZ6kjF41MzPrV50mxYj4JdDWSNCfdlBnOjC9jfJ5wC5tlD8P\nHNxZLGZmZn3JV7QxMzNLTopmZmbJSdHMzCw5KZqZmSUnRTMzs+SkaGZmlpwUzczMkpOimZlZclI0\nMzNLTopmZmbJSdHMzCw5KZqZmSUnRTMzs+SkaGZmlpwUzczMkpOimZlZclI0MzNLTopmZmZpcLMD\nWO9NmPDy/Lx5nZebmVnLclLsTdVE2Eh5T5Jl/TadeM3MesxJsZn6qjXZn61Xt4jNbAPipNgqGklk\njdZvpLyr2+lpwnM3s5mtBzpNipJGAxcCw4EAZkTEmZK2Bi4DxgDLgEMiYnXWOQU4ClgLnBgR12b5\n7sAFwFDgp8AnIyIkDcl97A48ARwaEct67Vn2tq4mmlbbfnf20Zvr96SbuZEk2tUvGE7GZpYaaSmu\nAU6KiN9K2hy4Q9L1wJHAjRHxdUknAycD/yRpHDAF2BnYDrhB0hsjYi1wDnA0MJeSFCcB11AS6OqI\n2EnSFOAbwKG9+URtPdZIQu7NLxJuvZoNWJ0mxYhYAazI+Wcl3QOMBCYDe+dqM4GbgX/K8ksj4gVg\nqaQlwERJy4AtIuJWAEkXAgdSkuJk4LTc1uXAdyUpIqLnT9H6TX+0cLuqvxOqma3XunROUdIYYDdK\nS294JkyARyndq1AS5q2Vag9n2Ys5X19eq/MQQESskfQ0sA3weN3+pwHTAF7/+td3JXTbEDmZmVkv\nazgpStoMuAL4VEQ8I+kvy/K8YJ+36iJiBjADYMKECW5Fmpn1AX1FvXreIE6NTr/BSloLLAQ2ppy2\nuxA4PSJe6s1YOtNQUpS0MSUhXhwRP87ixySNiIgVkkYAK7N8OTC6Un1Uli3P+fryap2HJQ0GtqQM\nuDEzs4HhzxExHkDSa4EfAVsAp/ZnEJ1e5k2lSXgecE9EfKeyaDYwNeenAldXyqdIGiJpB2AscFt2\ntT4jaY/c5hF1dWrbOgiY4/OJZmYDU0SspJwq+0dVuyUrJA2S9O+Sbpe0QNIxWf5hSTeqGCHpd5Je\n1+i+G2kpvgv4GLBQ0vws+wLwdWCWpKOAB4FD8sksljQLuJvSBD4+R54CHMfLP8m4JicoSfeiHJTz\nJGX0qpmZDVAR8YCkQcBrgcfaWOUo4OmIeHv+rO9Xkq6LiCslfQQ4nvILh1Mj4tFG99vI6NNfAm1m\namDfdupMB6a3UT4P2KWN8ueBgzuLxczMLO0HvFXSQfl4S0rP5FLgBGARcGtEXNKVjfqKNmZm1nIk\n7Ui5AMzK9lYBTqhdHKbOKOAlYLikjboyWMe3jjIzs5YiaRjwX8B3Oxhfci3wDzkQFElvlLRpDtY8\nHzgMuAf4TFf27ZaimZmto5GfUPSBoTlupfaTjIuA73Sw/vcplxn9bQ7GWUW5IMxJwC8i4peS7gJu\nl/S/EXFPI0E4KZqZWdNFxKAurv8SZdDnF+oWfbWyzrPAm7qyXXefmpmZJbcUzcysZUnan3KTiKql\nEfHhvtifk6KZmbWsHF3a1gjTPuHuUzMzs+SkaGZmlpwUzczMkpOimZlZ8kAbMzNbl3r3fopEYxcD\nkHQgcCXw5oi4t1djaJBbimZm1ioOA36Zf5vCSdHMzJpO0mbAnpRbQnV4+0BJn6vcR/ErWfb2fLxJ\nXgN1saRX3JWpM+4+NTOzVjAZ+FlE/E7SE5J2j4g76leStB/lFlETKXfKmC3p3RFxi6TZwNco9+z9\nYUQs6moQTopmZi1qwoyXT8XNm9a7p/la0GHAmTl/aT5+RVKk3EdxP+DOfLwZJUneQrnu6e3A88CJ\n3QnCSdHMzJpK0tbAPsBbJAUwCAhJn2vj1lEC/i0ivtfGprahJMmNgU2AP3Y1Fp9TNDOzZjsIuCgi\nto+IMRExGlgK7NXGutcCH89zkEgaKem1uex7wD8DF/PK66U2xC1FsxZR7Soza6oGf0LRiw7jlUns\niiy/pVoYEddJejPwm3IbRZ4DPippEvBiRPxI0iDg15L2iYg5XQnESdHMzJoqIt7bRtlZHax/Ji+f\nf6z5PXBhLl8LvKM7sbj71MzMLHWaFCWdL2mlpEWVstMkLZc0P6cDKstOkbRE0n15H6xa+e6SFuay\ns5TtXklDJF2W5XMljendp2hmZusbSW+p5JjaNLev99tIS/ECYFIb5adHxPicfgogaRzlR5c7Z52z\ns28X4BzgaMrQ2bGVbR4FrI6InYDT6ebJUTMz23BExMJKjqlN3eoS7YpOk2JE3AI82eD2JgOXRsQL\nEbEUWAJMlDQC2CIibs3htRcCB1bqzMz5y4F9a61IMzOz/tSTc4on5CV1zpe0VZaNBB6qrPNwlo3M\n+frydepExBrgacpvTczMzPpVd5PiOcCOwHhgBfDtXouoA5KmSZonad6qVav6Y5dmZjaAdCspRsRj\nEbE2Il4CzqVcgw5gOTC6suqoLFue8/Xl69SRNBjYEniinf3OiIgJETFh2LBh3QndzMysXd1KinmO\nsObDQG1k6mxgSo4o3YEyoOa2iFgBPCNpjzxfeARwdaXO1Jw/CJjTxmV9zMzM+lynP96XdAmwN7Ct\npIeBU4G9JY0HAlgGHAMQEYslzQLuBtYAx+ePKAGOo4xkHQpckxPAecBFkpZQBvR0eMsQMzOzvtJp\nUoyItm72eF4H608HprdRPg94xb2tIuJ54ODO4jAzM+trvqKNmZlZclI0MzNLTopmZmbJSdHMzCw5\nKZqZmSUnRTMzs+SkaGZmlpwUzczMkpOimZlZclI0MzNLTopmZmbJSdHMzCw5KZqZmSUnRTMzs+Sk\naGZmlpwUzczMkpOimZlZclI0MzNLTopmZmbJSdHMzCw5KZqZmSUnRTMzs9RpUpR0vqSVkhZVyraW\ndL2k+/PvVpVlp0haIuk+SftXyneXtDCXnSVJWT5E0mVZPlfSmN59imZmZo1ppKV4ATCpruxk4MaI\nGAvcmI+RNA6YAuycdc6WNCjrnAMcDYzNqbbNo4DVEbETcDrwje4+GTMzs57oNClGxC3Ak3XFk4GZ\nOT8TOLBSfmlEvBARS4ElwERJI4AtIuLWiAjgwro6tW1dDuxba0WamZn1p+6eUxweESty/lFgeM6P\nBB6qrPdwlo3M+frydepExBrgaWCbtnYqaZqkeZLmrVq1qpuhm5mZta3HA22y5Re9EEsj+5oRERMi\nYsKwYcP6Y5dmZjaAdDcpPpZdouTflVm+HBhdWW9Uli3P+frydepIGgxsCTzRzbjMzMy6rbtJcTYw\nNeenAldXyqfkiNIdKANqbsuu1mck7ZHnC4+oq1Pb1kHAnGx9mpmZ9avBna0g6RJgb2BbSQ8DpwJf\nB2ZJOgp4EDgEICIWS5oF3A2sAY6PiLW5qeMoI1mHAtfkBHAecJGkJZQBPVN65ZmZmZl1UadJMSIO\na2fRvu2sPx2Y3kb5PGCXNsqfBw7uLA4zM7O+5ivamJmZJSdFMzOz5KRoZmaWnBTNzMySk6KZmVly\nUjQzM0tOimZmZslJ0czMLDkpmpmZJSdFMzOz5KRoZmaWnBTNzMySk6KZmVlyUjQzM0tOimZmZslJ\n0czMLDkpmpmZJSdFMzOz5KRoZmaWnBTNzMySk6KZmVnqUVKUtEzSQknzJc3Lsq0lXS/p/vy7VWX9\nUyQtkXSfpP0r5bvndpZIOkuSehKXmZlZd/RGS/G9ETE+Iibk45OBGyNiLHBjPkbSOGAKsDMwCThb\n0qCscw5wNDA2p0m9EJeZmVmX9EX36WRgZs7PBA6slF8aES9ExFJgCTBR0ghgi4i4NSICuLBSx8zM\nrN/0NCkGcIOkOyRNy7LhEbEi5x8Fhuf8SOChSt2Hs2xkzteXv4KkaZLmSZq3atWqHoZuZma2rsE9\nrL9nRCyX9Frgekn3VhdGREiKHu6jur0ZwAyACRMm9Np2zczMoIctxYhYnn9XAlcCE4HHskuU/Lsy\nV18OjK5UH5Vly3O+vtzMzKxfdTspStpU0ua1eWA/YBEwG5iaq00Frs752cAUSUMk7UAZUHNbdrU+\nI2mPHHV6RKWOmZlZv+lJ9+lw4Mr89cRg4EcR8TNJtwOzJB0FPAgcAhARiyXNAu4G1gDHR8Ta3NZx\nwAXAUOCanMzMzPpVt5NiRDwA7NpG+RPAvu3UmQ5Mb6N8HrBLd2MxMzPrDb6ijZmZWXJSNDMzS06K\nZmZmyUnRzMwsOSmamZklJ0UzM7PkpGhmZpacFM3MzJKTopmZWXJSNDMzS06KZmZmyUnRzMwsOSma\nmZklJ0UzM7PkpGhmZpacFM3MzJKTopmZWXJSNDMzS06KZmZmyUnRzMwsOSmamZklJ0UzM7PUMklR\n0iRJ90laIunkZsdjZmYDT0skRUmDgP8E3g+MAw6TNK65UZmZ2UDTEkkRmAgsiYgHIuL/gEuByU2O\nyczMBpjBzQ4gjQQeqjx+GHhH/UqSpgHT8uFzku7r5v62BR7vZt2+1qqxtWpc0JexST2p3arHrFXj\ngtaNrelx6Zh234tdjW37nkez4WqVpNiQiJgBzOjpdiTNi4gJvRBSr2vV2Fo1Lmjd2BxX17VqbK0a\nF7R2bOujVuk+XQ6MrjwelWVmZmb9plWS4u3AWEk7SHoVMAWY3eSYzMxsgGmJ7tOIWCPpH4FrgUHA\n+RGxuA932eMu2D7UqrG1alzQurE5rq5r1dhaNS5o7djWO4qIZsdgZmbWElql+9TMzKzpnBTNzMzS\ngEuKzb6cnKRlkhZKmi9pXpZtLel6Sffn360q65+Ssd4naf9ejuV8SSslLaqUdTkWSbvnc1oi6Syp\nZz/uayeu0yQtz+M2X9IBTYhrtKSbJN0tabGkT2Z5U49ZB3G1wjHbRNJtku7K2L6S5c0+Zu3F1fRj\nltscJOlOST/Jx03/vxwwImLATJRBPL8HdgReBdwFjOvnGJYB29aVfRM4OedPBr6R8+MyxiHADhn7\noF6M5d3A24BFPYkFuA3YAxBwDfD+PojrNOCzbazbn3GNAN6W85sDv8v9N/WYdRBXKxwzAZvl/MbA\n3Nx+s48wVQUgAAAKGElEQVRZe3E1/ZjlNj8D/Aj4Sav8Xw6UaaC1FFv1cnKTgZk5PxM4sFJ+aUS8\nEBFLgSWU59ArIuIW4MmexCJpBLBFRNwa5T/xwkqd3oyrPf0Z14qI+G3OPwvcQ7kaU1OPWQdxtac/\nj1lExHP5cOOcguYfs/biak+/HTNJo4APAN+v239T/y8HioGWFNu6nFxHHx59IYAbJN2hctk6gOER\nsSLnHwWG53wz4u1qLCNzvj9iPEHSguxerXUfNSUuSWOA3SgtjJY5ZnVxQQscs+wKnA+sBK6PiJY4\nZu3EBc0/ZmcAnwdeqpQ1/XgNFAMtKbaCPSNiPOWOIMdLend1YX6ra4nfybRSLMA5lG7v8cAK4NvN\nCkTSZsAVwKci4pnqsmYeszbiaoljFhFr8z0/itKK2aVueVOOWTtxNfWYSfogsDIi7mhvnRb7v9zg\nDLSk2PTLyUXE8vy7EriS0h36WHZ3kH9X5urNiLersSzP+T6NMSIeyw+xl4BzebkbuV/jkrQxJfFc\nHBE/zuKmH7O24mqVY1YTEU8BNwGTaIFj1lZcLXDM3gX8jaRllNM7+0j6IS10vDZ0Ay0pNvVycpI2\nlbR5bR7YD1iUMUzN1aYCV+f8bGCKpCGSdgDGUk6e96UuxZJdOs9I2iNHtx1RqdNrah8I6cOU49av\nceV2zgPuiYjvVBY19Zi1F1eLHLNhkl6T80OB9wH30vxj1mZczT5mEXFKRIyKiDGUz6c5EfFRWvT/\ncoPUWyN21pcJOIAyOu/3wBf7ed87UkaK3QUsru0f2Aa4EbgfuAHYulLnixnrffTy6DHgEkoX0YuU\ncw5HdScWYALlw+P3wHfJKyX1clwXAQuBBZQPghFNiGtPSrfVAmB+Tgc0+5h1EFcrHLO3AndmDIuA\nL3f3Pd/Lx6y9uJp+zCrb3ZuXR582/f9yoEy+zJuZmVkaaN2nZmZm7XJSNDMzS06KZmZmyUnRzMws\nOSmamZklJ0UzM7PkpLiBkjRU0s/z+o5jJP1dZdkESWf14b73lvT/+mr7fSl/BH2Dym2DDpW0l8qt\nhebnj7y7sq1PSXp15fENlWtp1q+7TNIv6srma93bZ+2pcruje3OaVllWveXR/ZJ+LGlcF+M9TdJn\nu1KnL0naTtLlXaxzs6QJfRWTbficFDdcHwd+HBFrgTHAX5JiRMyLiBP7cN97A+tlUqRcTJuIGB8R\nlwGHA/+Wj//cxW19Cnh15fFFwHEdrL+5pNEAkt5cXSDpdZRbCR0bEW+i/GD/GEkfqKx2esY5FrgM\nmCNpWBdjbgmSBkfEIxFxULNjsYHFSXHDdTgvX9bp68Be2Yr4dLbkajcvPU3STEm/kPSgpL+V9E2V\nm5P+LK+pWbth6c9V7u5xbeU6jCeq3Nx2gaRLVe7ScCzw6dzfXpI+JGmuyk1Tb5A0vIv7XlYpv03S\nTll+sKRFKjeKvaUrB0flpq1XZdy3SnqrpNcCPwTenrEfAxwC/IukiyWNkHRLrQUnaa/c1n6SfiPp\nt5L+W9Jmkk4EtgNuknRT7nY2cFgHYc0CDs35wyhX9qk5HrggXr5F1OOUOym0eaPsTOjXUfkyVHnu\nR0u6PY/bFdXWbGWdN+RrcEe+Pm/K8qslHZHzx0i6uL0nk622MyvHa2KWb6pyB4rb8j0xOcuPlDRb\n0hzgRpUejkW5bBNJP8j3wJ2S3pvlQ/N9d4+kK4EutebNXqHZl9Tx1PsT5QbKj1Ye701eLqr+MeWm\nqr+k3E9uV+BP5KWiKBcsPzCX/RoYluWHAufn/CPAkJx/TWWbn63sbyv4y9WTPgF8u9F95/wyXr4k\n3hGV2BcCI6v77sIx+g/g1JzfB5jfzrG6ADgo50+qxDGIckPfbYFbgE2z/J94+ZJhy3jlDaXvB7Zp\nI55lwF8Bv87Hd1JuILsoH/8YmFxXZ0vgybaOeZZ9CjinjX1tU5n/GnBC/TYolxQbm/PvoFyDE8ot\ni5YAe1Eul7h1/fYr274ZODfn3115Lv8KfLT2uuV2NgWOpFzWb+tcNqZS5yRefs+9CfgDsAnlZry1\n8rcCa4AJzf4f9LT+ToOxDdG2wFNdWP+aiHhR0kLKh/3Psnwh5YPpr4BdgOslkevU7u22ALhY0lXA\nVe1sfxRwWbYuXwUs7cK+ay6p/D09538FXCBpFiVpdMWewEcAImKOpG0kbdFJnduB87MFe1VEzJf0\nHkry+lUem1cBv+lgGyspLcgn2lj2BLBa0hTKjYL/1JUn1Aa1U76LpK9REtJmwLXrVCq3oPp/wH/n\nc4JyZ3ci4jFJX6bcVeLDEdHZzaAvyXq3SNpC5SLc+1HuBFE7f7kJ8Pqcv76dbe5J+SJDRNwr6UHg\njZRke1aWL5C0oJN4zDrkpLhh+jPlg6ZRLwBExEuSXoyI2gVxX6K8RwQsjoh3tlH3A5QPpg8BX5T0\nljbW+Q/gOxExW9LelBZJo/uuifr5iDhW0jsyhjsk7R4Rf0k2kqbnMqLcN69H8oP93bnNCyR9B1hN\n+SDvqFu0ahPK69Oey4D/pLSaqu4GdmfdOx3sTrmwfHt2A+a1UX4BpRV+l6QjKa3jqo2Apzo4Zm+h\nJPDtOth3Tf3FlYPyfvpIRNxXXZCv5R8b2KZZn/E5xQ1QRKwGBkmqJcZnKV193XUfMEzSO6Hcu0/S\nzpI2AkZHxE2UbsMtKS2P+v1tycv3cptK9xxa+fubjOMNETE3Ir4MrGLd+8oREV+MMvCkrQ/3X1DO\nu5KJ+vGou2FwPUnbA49FxLnA94G3AbcC76qc59xU0huzyjrHQaXZ9TpKV2l7rgS+SV3rjUyUksbn\ntrYBvpHrthXrRygtskvaWLw5sCJbvIfXL8zjsFTSwbW4Je2a8xMpN8jeDfisyu2KOnJo1tsTeDoi\nns7ndkIeDyTt1sk2YN3X642UluV9lK7rv8vyXShdqGbd5pbihus6SpfTDZQuzrWS7qK0Eu7syoYi\n4v8kHQScJWlLyvvmDMq5oB9mmYCzIuIpSf8DXJ4DKE6gtAz/W9JqYA7Q2QdpW7bKrrEXeHmwyr9L\nGpv7vpFyS65GnUbpCl1A6aZsJFnvDXxO0ovAc8AREbEqW1uXSBqS632JcmxmAD+T9EhEvJfSsrs1\nIta0t4OIeJaS7Kh0XRIRKyR9FDhX5Z6cAs6IiP+pVP90rrMp5ZZB+0TEqjZ288/AXMoXibm0/YXp\ncOAcSV+inPO9VNK9lBvv/n1EPCLpJMox3KfSwq/3vKQ7cxsfz7J/obx/FuQXq6XAB9s7JunsjGch\n5bzhkRHxgqRzgB9IuofS5dzuHevNGuFbR22gJL0N+HREfKzZsfSUyl3IJ0QZcbneknQmMDsibmx2\nLP1B0s2UgTttdeGatSR3n26gogzdv0nSoGbHYn+xaKAkRLP1lVuKZtYjkv4TeFdd8ZkR8YNmxGPW\nE06KZmZmyd2nZmZmyUnRzMwsOSmamZklJ0UzM7P0/wGV6X2QAeMN6wAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.hist((timestamps_Dex - offset) % alex_period, bins=np.arange(0, alex_period, 40), alpha=0.8, color='green', label='D_ex')\n", "ax.hist((timestamps_Aex - offset) % alex_period, bins=np.arange(0, alex_period, 40), alpha=0.8, color='red', label='A_ex')\n", "ax.set_xlabel('(timestamps - offset) MOD alex_period')\n", "ax.set_title('ALEX histogram (selected periods only)')\n", "ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), frameon=False);" ] }, { "cell_type": "code", "execution_count": 18, "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": "137px", "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 }