diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 36f74eb5..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-fretbursts/_version.py export-subst
diff --git a/.github/workflows/build_wheel.yml b/.github/workflows/build_wheel.yml
new file mode 100644
index 00000000..ae7c1766
--- /dev/null
+++ b/.github/workflows/build_wheel.yml
@@ -0,0 +1,32 @@
+name: Build
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ build_wheels:
+ name: Build wheels on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-22.04, windows-2022, macos-13, macos-14]
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build wheels
+ uses: pypa/cibuildwheel@v2.18.1
+ env:
+ CIBW_SKIP: "pp*"
+ # CIBW_TEST_REQUIRES: pytest, numpy == 1.20.1, matplotlib, scipy, pandas, tables, numba, seaborn, lmfit, phconvert
+ # CIBW_BEFORE_TEST: python -m pip install pytest
+ # CIBW_TEST_COMMAND: python -m pytest {package}/tests
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
+ path: ./wheelhouse/*.whl
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 600d133e..87a1d5b8 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -1,59 +1,85 @@
name: Tests
-on:
- push:
- branch:
- - gitactions
- pull_request:
- branch:
- - gitactions
+on: [push, pull_request]
jobs:
build:
-
runs-on: ${{matrix.os}}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest, macos-latest]
- python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
-
+ os: [ubuntu-22.04, windows-latest, macos-latest]
+ python-version: ["3.7", "3.8", "3.12"]
+ exclude:
+ - os: macOS-latest
+ python-version: "3.7"
+ - os: windows-latest
+ python-version: "3.7"
steps:
- - uses: actions/checkout@v3
- - name: Setup Python ${{matrix.python-version}}
- uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ with:
+ persist-credentials: false
+ fetch-depth: 0
+ # - name: Setup Python ${{matrix.python-version}}
+ # uses: actions/setup-python@v4
+ # with:
+ # python-version: ${{matrix.python-version}}
+ - uses: conda-incubator/setup-miniconda@v3
with:
- python-version: ${{matrix.python-version}}
+ auto-update-conda: true
+ activate-environment: test
+ channels: conda-forge
+ python-version: ${{ matrix.python-version }}
+ - name: Upgrade pip
+ shell: bash -l {0}
+ run: python -m pip install --upgrade pip
+ - name: MacOS install hdf5 dependencies
+ if: runner.os == 'macOS'
+ run: |
+ brew install hdf5
+ export HDF5_DIR=/usr/local/
+ export BLOSC_DIR=/usr/local/
+ - name: Install Dependencies
+ shell: bash -l {0}
+ run: |
+ conda install cython numpy numba nbconvert pytest jupyter scipy pandas matplotlib pytables phconvert lmfit pybroom seaborn setuptools build pyqt
+ - name: Install project
+ shell: bash -l {0}
+ run: |
+ python -m pip install .
- name: Download files Unix
if: runner.os != 'Windows'
+ shell: bash -l {0}
run: |
+ cd notebooks
+ mkdir data
+ cd data
wget -N http://files.figshare.com/2182604/12d_New_30p_320mW_steer_3.hdf5
wget -N http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5
wget -N https://zenodo.org/record/5902313/files/HP3_TE150_SPC630.hdf5
wget -N https://zenodo.org/record/5902313/files/HP3_TE200_SPC630.hdf5
wget -N https://zenodo.org/record/5902313/files/HP3_TE250_SPC630.hdf5
wget -N https://zenodo.org/record/5902313/files/HP3_TE300_SPC630.hdf5
+ cd ../..
- name: Downlaod files Windows
if: runner.os == 'Windows'
+ shell: bash -l {0}
run: |
- curl.exe --output 2182604/12d_New_30p_320mW_steer_3.hdf5 --url http://files.figshare.com/2182604/12d_New_30p_320mW_steer_3.hdf5
- curl.exe --output 0023uLRpitc_NTP_20dT_0.5GndCl.hdf5 --url http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5
- curl.exe --output HP3_TE150_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE150_SPC630.hdf5
- curl.exe --output HP3_TE200_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE200_SPC630.hdf5
- curl.exe --output HP3_TE250_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE250_SPC630.hdf5
- curl.exe --output HP3_TE300_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE300_SPC630.hdf5
- - name: Upgrade pip
- run: python -m pip install --upgrade pip
- - name: Windows 3.6 Oddities
- if: matrix.python-version == 3.6 && runner.os == 'Windows'
- run: python -m pip install pywinpty==1.1.6
- - name: Install Dependencies
- run: |
- python -m pip install pytest cython numpy scipy pandas matplotlib seaborn
- python -m pip install jupyter nbconvert lmfit phconvert pybroom
- - name: Install project
- run: |
- python setup.py sdist
- python -m pip install .
+ cd notebooks
+ mkdir data
+ cd data
+ curl.exe -L --output 12d_New_30p_320mW_steer_3.hdf5 --url http://files.figshare.com/2182604/12d_New_30p_320mW_steer_3.hdf5
+ curl.exe -L --output 0023uLRpitc_NTP_20dT_0.5GndCl.hdf5 --url http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5
+ curl.exe -L --output HP3_TE150_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE150_SPC630.hdf5
+ curl.exe -L --output HP3_TE200_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE200_SPC630.hdf5
+ curl.exe -L --output HP3_TE250_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE250_SPC630.hdf5
+ curl.exe -L --output HP3_TE300_SPC630.hdf5 --url https://zenodo.org/record/5902313/files/HP3_TE300_SPC630.hdf5
+ cd ..
+ cd ..
+
- name: Test project
+ shell: bash -l {0}
run: |
- python fretbursts/tests/nbrun.py notebooks
+ cd notebooks
+ python nbrun.py .
+ cd ..
+ cd tests
python -m pytest
diff --git a/.gitignore b/.gitignore
index 80276882..aa59db03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
burstsearch/build/
docs/source/_themes/
*ipynb_checkpoints*
+fretbursts/_version.py
*build/
*egg-info/
@@ -30,5 +31,6 @@ notebooks/out
notebooks/wip
.cache
*.csv
+*.mat
_*
docs/source/modules/generated
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 7dfcf5df..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-language: python
-sudo: required
-dist: xenial
-
-python:
- - "3.6"
- - "3.7"
- - "3.8"
- - "3.9"
- - "3.10"
-
-services:
- - xvfb
-
-before_install:
- - wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
- - chmod +x miniconda.sh
- - ./miniconda.sh -b
- - export PATH=/home/travis/miniconda3/bin:$PATH
-
-install:
- - conda create -n conda_test_env --yes python=$TRAVIS_PYTHON_VERSION
- - source activate conda_test_env
- - conda install --yes scipy pandas matplotlib cython numba pytest nbconvert ipykernel ipywidgets seaborn
- - conda config --append channels conda-forge
- - conda install --yes lmfit
- - conda install --yes phconvert
- - pip install pybroom
- - python setup.py build
- - pip install pybroom
- - pip install .
- - rm -rf build/
-
-before_script:
- - mkdir notebooks/data
- - cd notebooks/data
- - wget -N http://files.figshare.com/2182604/12d_New_30p_320mW_steer_3.hdf5
- - wget -N http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5
- - cd ../..
-
-script:
- - python -Wd fretbursts/tests/importtest.py
- - py.test -v
- - cd notebooks
- - python ../fretbursts/tests/nbrun.py --exclude-list dev/exclude-py27.txt .
-
-sudo: false
diff --git a/LongDescription.md b/LongDescription.md
new file mode 100644
index 00000000..851a51d1
--- /dev/null
+++ b/LongDescription.md
@@ -0,0 +1,20 @@
+FRETBursts
+==========
+
+**FRETBursts** is a software toolkit for burst analysis of confocal
+single-molecule FRET (smFRET) measurements. It can analyze both single-spot
+and multi-spot smFRET data with or without alternating laser excitation (ALEX).
+
+For more info please refer to:
+
+- **FRETBursts: An Open Source Toolkit for Analysis of Freely-Diffusing Single-Molecule FRET**
+ *Ingargiola et. al.* (2016). PLoS ONE doi: `10.1371/journal.pone.0160716 <10.1371/journal.pone.0160716>`__.
+
+
+Quick links:
+
+- `FRETBursts Homepage `_
+- `FRETBursts Reference Documentation `_
+- `FRETBursts Tutorials `_
+
+See also `Release Notes `__.
diff --git a/MANIFEST.in b/MANIFEST.in
index da275dc2..6006776d 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,4 +1,2 @@
-include versioneer.py
-include fretbursts/_version.py
include LICENSE.txt
include README.md
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index e9c26341..00000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-build: false
-
-environment:
- matrix:
-
- - PYTHON: "C:\\Python36-x64"
- PYTHON_VERSION: "3.6"
- PYTHON_ARCH: "64"
- MINICONDA: C:\Miniconda36-x64
-
- - PYTHON: "C:\\Python37-x64"
- PYTHON_VERSION: "3.7"
- PYTHON_ARCH: "64"
- MINICONDA: C:\Miniconda37-x64
-
-init:
- - "ECHO %PYTHON% %PYTHON_VERSION% %PYTHON_ARCH% %MINICONDA%"
-
-install:
- - "set PATH=%MINICONDA%;%MINICONDA%\\Scripts;%PATH%"
- - conda config --set always_yes yes --set changeps1 no
- - conda update -q conda
- - conda info -a
- - conda config --append channels conda-forge
- - "conda create -q -n test-environment python=%PYTHON_VERSION% pip scipy pandas matplotlib lmfit cython numba nbconvert pytest ipykernel ipywidgets seaborn terminado"
- - activate test-environment
- - conda install phconvert
- - python -m pip install --upgrade pip
- - pip install pybroom
- - python --version
- - cd %APPVEYOR_BUILD_FOLDER%
- - dir
- - build.cmd python setup.py build
- - pip install .
- - python setup.py clean --all
-
-before_test:
- - cd %APPVEYOR_BUILD_FOLDER%\notebooks
- - mkdir data
- - cd data
- - dir
- - ps: wget http://files.figshare.com/2182604/12d_New_30p_320mW_steer_3.hdf5 -OutFile 12d_New_30p_320mW_steer_3.hdf5
- - ps: wget http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5 -OutFile 0023uLRpitc_NTP_20dT_0.5GndCl.hdf5
-
-test_script:
- - cd %APPVEYOR_BUILD_FOLDER%
- - python -Wd fretbursts/tests/importtest.py
- - py.test -v
- - cd %APPVEYOR_BUILD_FOLDER%\notebooks
- - python ../fretbursts/tests/nbrun.py --exclude-list dev/exclude-py27.txt .
-
-after_test:
- - cd %APPVEYOR_BUILD_FOLDER%
- - python setup.py bdist_wheel
-
-artifacts:
- # bdist_wheel puts your built wheel in the dist directory
- - path: dist\*
diff --git a/docs/source/absolute_beginner.rst b/docs/source/absolute_beginner.rst
index 4844d2e1..b379d39f 100644
--- a/docs/source/absolute_beginner.rst
+++ b/docs/source/absolute_beginner.rst
@@ -6,8 +6,9 @@ Getting started for the absolute python beginner
Before running FRETBursts you need to install a python distribution that
includes the Jupyter/IPython Notebook application.
-You can find a quick guide for installing the software and running your first
-notebook here:
+We recomend using Anaconda, which you can find instructions for downloading and installing here: `Anaconda installation instructions `_.
+
+You can find a guide for jupyter notebooks here:
- |jupyter_quick_guide|
@@ -31,6 +32,19 @@ The installation should take a few seconds.
If you notice any error please report it by opening a new issue on the
`FRETBursts GitHub Issues `_.
+Alternatively create an environment from one of our yaml files where we have verified compatibility of all versions of the software: :downlaod:`frbmin.yml `
+
+First download `frbmin.yml`
+
+Then run the following in your terminal::
+
+ conda env create -f frbmin.yml
+ conda activate frbmin
+
+.. note::
+ You may need to replace frbmin.yml with the path to the file you downloaded.
+ :ref:`instalation` provides other yaml files for more complete environments.
+
Running FRETBursts tutorial notebook
------------------------------------
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 2f8fa2a0..60af79e4 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -54,8 +54,9 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../..'))
import fretbursts
-version = fretbursts._version.get_versions()['version'][:13]
-release = version
+from importlib.metadata import version as get_version
+release: str = get_version("fretbursts")
+version: str = ".".join(release).split('.')[:2])
import sphinx_bootstrap_theme
html_theme = 'bootstrap'
diff --git a/docs/source/downloads/frbcmplt.yml b/docs/source/downloads/frbcmplt.yml
new file mode 100644
index 00000000..447709a3
--- /dev/null
+++ b/docs/source/downloads/frbcmplt.yml
@@ -0,0 +1,23 @@
+name: frbcmplt
+channels:
+ - conda-forge
+ - defaults
+dependencies:
+ - python=3.10
+ - importlib_metadata
+ - pytest=7.4.0
+ - cython=3.0.10
+ - ipython=8.24.0
+ - jupyter=1.0.0
+ - numpy=1.26.4
+ - numba=0.59.1
+ - pytables=3.9.2
+ - matplotlib=3.8.4
+ - pandas=2.2.2
+ - scipy=1.13.1
+ - seaborn=0.13.1
+ - pyqt=5.15.9
+ - lmfit=1.2.2
+ - phconvert=0.9.1
+ - pybroom=0.2
+
diff --git a/docs/source/downloads/frbmin.yml b/docs/source/downloads/frbmin.yml
new file mode 100644
index 00000000..53452bfd
--- /dev/null
+++ b/docs/source/downloads/frbmin.yml
@@ -0,0 +1,19 @@
+name: frbmin
+channels:
+ - conda-forge
+ - defaults
+dependencies:
+ - python=3.10
+ - importlib_metadata
+ - ipython=8.24.0
+ - jupyter=1.0.0
+ - numpy=1.26.4
+ - pytables=3.9.2
+ - matplotlib=3.8.4
+ - pandas=2.2.2
+ - scipy=1.13.1
+ - seaborn=0.13.1
+ - pyqt=5.15.9
+ - lmfit=1.2.2
+ - phconvert=0.9.1
+
diff --git a/docs/source/installation.rst b/docs/source/installation.rst
index a47769ad..4355c550 100644
--- a/docs/source/installation.rst
+++ b/docs/source/installation.rst
@@ -17,9 +17,8 @@ Installing latest stable version
The preferred way to to install and keep FRETBursts updated is through
`conda`, a package manager used by Anaconda scientific python distribution.
-If you haven't done it already, please install the python3 version of
-`Continuum Anaconda distribution `__
-(legacy python 2.7 works at the moment but it will be discontinued soon).
+If you haven't done it already, please install the python3. We recommend using `Anaconda `_.
+
Then, you can install or upgrade FRETBursts with::
conda install fretbursts -c conda-forge
@@ -33,6 +32,35 @@ and how to launch it please see:
See also the FRETBursts documentation section: :ref:`running_fretbursts`.
+Install from yaml file
+----------------------
+
+With anaconda, you can manage different environments, allowing specific versions to be installed ensuring compatibility.
+Which packages you need will depend on your use case.
+
+Environments can be build from yaml files with::
+
+ conda env create -f
+
+And activate with::
+
+ conda activate
+
+Below are environment files that we have *_**verified to work**
+#. Minimal environment: :download:`frbmin.yml` which will create an environment named `frbmin` which contains just the essential packages for running the notebooks
+#. Complete environment :download:`frbcmpt.yml` which will create an environment named `frbcmplt` which also includes cython, testing packages and numba, which are not necesary for running FRETBursts, but can come in helpful in other circumstances
+
+For packages build off of FRETBursts, check their respective documentation for similar yaml files.
+
+To create an environemnt from a downloaded yml file (like those above) run the command in your terminal::
+
+ conda env create
+
+Then simply activate the environment with::
+
+ conda activate
+
+
Alternative methods: using PIP
------------------------------
@@ -57,13 +85,13 @@ containing the fretbursts (do it only once after installing Anaconda)::
conda config --append channels conda-forge
-Then create a new conda environment with python 3.7 and FRETbursts::
+Then create a new conda environment with python 3.10 and FRETbursts::
- conda create -n py37-fb python=3.7 fretbursts
- conda activate py37-fb
+ conda create -n py310-fb python=3.10 fretbursts
+ conda activate py310-fb
conda install pyqt # optional
pip install pybroom # optional
- python -m ipykernel install --user --name py37-fb --display-name "Python 3.7 (FB)"
+ python -m ipykernel install --user --name py310-fb --display-name "Python 3.10 (FB)"
The last command installs the
`jupyter kernel `__
diff --git a/docs/source/releasenotes.rst b/docs/source/releasenotes.rst
index e6c3002c..5573286a 100644
--- a/docs/source/releasenotes.rst
+++ b/docs/source/releasenotes.rst
@@ -1,6 +1,15 @@
FRETBursts Release Notes
========================
+Version 0.8.0 (Jun. 2024)
+------------------------
+
+- Removed support for Python 3.6, as Python 3.7 now in end of life and 3.6 not supported
+- Switch to using setuptools_scm for version managemnt instead of versioneer
+- Updates for newer numpy compatibility (deprecation of np.float)
+- Introduce :func:`burst_plot.scatter_burst_data` function for scatter plotting (currently now used in :func:`scatter_naa_nt` and :func:`scatter_alex`) to normalize scatter ploting.
+- use of :func:`burst_plot.scatter_burst_data` enables KDE density estimation with keyword argument `color_style='kde'`
+
Version 0.7.1
-------------
diff --git a/fretbursts/utils/examples/matplotlib_figure_mod_toolbar.py b/examples/matplotlib_figure_mod_toolbar.py
similarity index 100%
rename from fretbursts/utils/examples/matplotlib_figure_mod_toolbar.py
rename to examples/matplotlib_figure_mod_toolbar.py
diff --git a/fretbursts/utils/examples/matplotlib_fonts.py b/examples/matplotlib_fonts.py
similarity index 100%
rename from fretbursts/utils/examples/matplotlib_fonts.py
rename to examples/matplotlib_fonts.py
diff --git a/fretbursts/utils/examples/matplotlib_gui_select.py b/examples/matplotlib_gui_select.py
similarity index 100%
rename from fretbursts/utils/examples/matplotlib_gui_select.py
rename to examples/matplotlib_gui_select.py
diff --git a/fretbursts/utils/examples/mpl_gui_selection.py b/examples/mpl_gui_selection.py
similarity index 100%
rename from fretbursts/utils/examples/mpl_gui_selection.py
rename to examples/mpl_gui_selection.py
diff --git a/fretbursts/utils/examples/qt4_figure.py b/examples/qt4_figure.py
similarity index 100%
rename from fretbursts/utils/examples/qt4_figure.py
rename to examples/qt4_figure.py
diff --git a/fretbursts/utils/examples/timetrace_scroll_demo.py b/examples/timetrace_scroll_demo.py
similarity index 100%
rename from fretbursts/utils/examples/timetrace_scroll_demo.py
rename to examples/timetrace_scroll_demo.py
diff --git a/fretbursts/utils/examples/timetrace_scroll_demo2.py b/examples/timetrace_scroll_demo2.py
similarity index 100%
rename from fretbursts/utils/examples/timetrace_scroll_demo2.py
rename to examples/timetrace_scroll_demo2.py
diff --git a/fretbursts/utils/examples/timetrace_scroll_demo3.py b/examples/timetrace_scroll_demo3.py
similarity index 100%
rename from fretbursts/utils/examples/timetrace_scroll_demo3.py
rename to examples/timetrace_scroll_demo3.py
diff --git a/fretbursts/utils/examples/timetrace_scroll_pygraphqt.py b/examples/timetrace_scroll_pygraphqt.py
similarity index 100%
rename from fretbursts/utils/examples/timetrace_scroll_pygraphqt.py
rename to examples/timetrace_scroll_pygraphqt.py
diff --git a/fretbursts/__init__.py b/fretbursts/__init__.py
index 018378f9..4becc5ed 100644
--- a/fretbursts/__init__.py
+++ b/fretbursts/__init__.py
@@ -5,12 +5,12 @@
# Antonino Ingargiola
#
-from ._version import get_versions
-__version__ = get_versions()['version']
-del get_versions
+## Citation information
-## Citation information
+from fretbursts._version import version as __version__
+import warnings
+
_CITATION = """
FRETBursts: An Open Source Toolkit for Analysis of Freely-Diffusing Single-Molecule FRET
Ingargiola et al. (2016). http://dx.doi.org/10.1371/journal.pone.0160716 """
@@ -25,9 +25,6 @@ def citation(bar=True):
cit = ('-' * 62) + '\n' + _INFO_CITATION + ('-' * 62)
print(cit)
-
-import warnings
-
try:
import pandas
except ImportError:
diff --git a/fretbursts/_version.py b/fretbursts/_version.py
deleted file mode 100644
index f3bfbd27..00000000
--- a/fretbursts/_version.py
+++ /dev/null
@@ -1,460 +0,0 @@
-
-# This file helps to compute a version number in source trees obtained from
-# git-archive tarball (such as those provided by githubs download-from-tag
-# feature). Distribution tarballs (built by setup.py sdist) and build
-# directories (produced by setup.py build) will contain a much shorter file
-# that just contains the computed version number.
-
-# This file is released into the public domain. Generated by
-# versioneer-0.15 (https://github.com/warner/python-versioneer)
-
-import errno
-import os
-import re
-import subprocess
-import sys
-
-
-def get_keywords():
- # these strings will be replaced by git during git-archive.
- # setup.py/versioneer.py will grep for the variable names, so they must
- # each be defined on a line of their own. _version.py will just call
- # get_keywords().
- git_refnames = "$Format:%d$"
- git_full = "$Format:%H$"
- keywords = {"refnames": git_refnames, "full": git_full}
- return keywords
-
-
-class VersioneerConfig:
- pass
-
-
-def get_config():
- # these strings are filled in when 'setup.py versioneer' creates
- # _version.py
- cfg = VersioneerConfig()
- cfg.VCS = "git"
- cfg.style = "pep440"
- cfg.tag_prefix = ""
- cfg.parentdir_prefix = "fretbursts-"
- cfg.versionfile_source = "fretbursts/_version.py"
- cfg.verbose = False
- return cfg
-
-
-class NotThisMethod(Exception):
- pass
-
-
-LONG_VERSION_PY = {}
-HANDLERS = {}
-
-
-def register_vcs_handler(vcs, method): # decorator
- def decorate(f):
- if vcs not in HANDLERS:
- HANDLERS[vcs] = {}
- HANDLERS[vcs][method] = f
- return f
- return decorate
-
-
-def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False):
- assert isinstance(commands, list)
- p = None
- for c in commands:
- try:
- dispcmd = str([c] + args)
- # remember shell=False, so use git.cmd on windows, not just git
- p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE,
- stderr=(subprocess.PIPE if hide_stderr
- else None))
- break
- except EnvironmentError:
- e = sys.exc_info()[1]
- if e.errno == errno.ENOENT:
- continue
- if verbose:
- print("unable to run %s" % dispcmd)
- print(e)
- return None
- else:
- if verbose:
- print("unable to find command, tried %s" % (commands,))
- return None
- stdout = p.communicate()[0].strip()
- if sys.version_info[0] >= 3:
- stdout = stdout.decode()
- if p.returncode != 0:
- if verbose:
- print("unable to run %s (error)" % dispcmd)
- return None
- return stdout
-
-
-def versions_from_parentdir(parentdir_prefix, root, verbose):
- # Source tarballs conventionally unpack into a directory that includes
- # both the project name and a version string.
- dirname = os.path.basename(root)
- if not dirname.startswith(parentdir_prefix):
- if verbose:
- print("guessing rootdir is '%s', but '%s' doesn't start with "
- "prefix '%s'" % (root, dirname, parentdir_prefix))
- raise NotThisMethod("rootdir doesn't start with parentdir_prefix")
- return {"version": dirname[len(parentdir_prefix):],
- "full-revisionid": None,
- "dirty": False, "error": None}
-
-
-@register_vcs_handler("git", "get_keywords")
-def git_get_keywords(versionfile_abs):
- # the code embedded in _version.py can just fetch the value of these
- # keywords. When used from setup.py, we don't want to import _version.py,
- # so we do it with a regexp instead. This function is not used from
- # _version.py.
- keywords = {}
- try:
- f = open(versionfile_abs, "r")
- for line in f.readlines():
- if line.strip().startswith("git_refnames ="):
- mo = re.search(r'=\s*"(.*)"', line)
- if mo:
- keywords["refnames"] = mo.group(1)
- if line.strip().startswith("git_full ="):
- mo = re.search(r'=\s*"(.*)"', line)
- if mo:
- keywords["full"] = mo.group(1)
- f.close()
- except EnvironmentError:
- pass
- return keywords
-
-
-@register_vcs_handler("git", "keywords")
-def git_versions_from_keywords(keywords, tag_prefix, verbose):
- if not keywords:
- raise NotThisMethod("no keywords at all, weird")
- refnames = keywords["refnames"].strip()
- if refnames.startswith("$Format"):
- if verbose:
- print("keywords are unexpanded, not using")
- raise NotThisMethod("unexpanded keywords, not a git-archive tarball")
- refs = set([r.strip() for r in refnames.strip("()").split(",")])
- # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
- # just "foo-1.0". If we see a "tag: " prefix, prefer those.
- TAG = "tag: "
- tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
- if not tags:
- # Either we're using git < 1.8.3, or there really are no tags. We use
- # a heuristic: assume all version tags have a digit. The old git %d
- # expansion behaves like git log --decorate=short and strips out the
- # refs/heads/ and refs/tags/ prefixes that would let us distinguish
- # between branches and tags. By ignoring refnames without digits, we
- # filter out many common branch names like "release" and
- # "stabilization", as well as "HEAD" and "master".
- tags = set([r for r in refs if re.search(r'\d', r)])
- if verbose:
- print("discarding '%s', no digits" % ",".join(refs-tags))
- if verbose:
- print("likely tags: %s" % ",".join(sorted(tags)))
- for ref in sorted(tags):
- # sorting will prefer e.g. "2.0" over "2.0rc1"
- if ref.startswith(tag_prefix):
- r = ref[len(tag_prefix):]
- if verbose:
- print("picking %s" % r)
- return {"version": r,
- "full-revisionid": keywords["full"].strip(),
- "dirty": False, "error": None
- }
- # no suitable tags, so version is "0+unknown", but full hex is still there
- if verbose:
- print("no suitable tags, using unknown + full revision id")
- return {"version": "0+unknown",
- "full-revisionid": keywords["full"].strip(),
- "dirty": False, "error": "no suitable tags"}
-
-
-@register_vcs_handler("git", "pieces_from_vcs")
-def git_pieces_from_vcs(tag_prefix, root, verbose, run_command=run_command):
- # this runs 'git' from the root of the source tree. This only gets called
- # if the git-archive 'subst' keywords were *not* expanded, and
- # _version.py hasn't already been rewritten with a short version string,
- # meaning we're inside a checked out source tree.
-
- if not os.path.exists(os.path.join(root, ".git")):
- if verbose:
- print("no .git in %s" % root)
- raise NotThisMethod("no .git directory")
-
- GITS = ["git"]
- if sys.platform == "win32":
- GITS = ["git.cmd", "git.exe"]
- # if there is a tag, this yields TAG-NUM-gHEX[-dirty]
- # if there are no tags, this yields HEX[-dirty] (no NUM)
- describe_out = run_command(GITS, ["describe", "--tags", "--dirty",
- "--always", "--long"],
- cwd=root)
- # --long was added in git-1.5.5
- if describe_out is None:
- raise NotThisMethod("'git describe' failed")
- describe_out = describe_out.strip()
- full_out = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
- if full_out is None:
- raise NotThisMethod("'git rev-parse' failed")
- full_out = full_out.strip()
-
- pieces = {}
- pieces["long"] = full_out
- pieces["short"] = full_out[:7] # maybe improved later
- pieces["error"] = None
-
- # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty]
- # TAG might have hyphens.
- git_describe = describe_out
-
- # look for -dirty suffix
- dirty = git_describe.endswith("-dirty")
- pieces["dirty"] = dirty
- if dirty:
- git_describe = git_describe[:git_describe.rindex("-dirty")]
-
- # now we have TAG-NUM-gHEX or HEX
-
- if "-" in git_describe:
- # TAG-NUM-gHEX
- mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
- if not mo:
- # unparseable. Maybe git-describe is misbehaving?
- pieces["error"] = ("unable to parse git-describe output: '%s'"
- % describe_out)
- return pieces
-
- # tag
- full_tag = mo.group(1)
- if not full_tag.startswith(tag_prefix):
- if verbose:
- fmt = "tag '%s' doesn't start with prefix '%s'"
- print(fmt % (full_tag, tag_prefix))
- pieces["error"] = ("tag '%s' doesn't start with prefix '%s'"
- % (full_tag, tag_prefix))
- return pieces
- pieces["closest-tag"] = full_tag[len(tag_prefix):]
-
- # distance: number of commits since tag
- pieces["distance"] = int(mo.group(2))
-
- # commit: short hex revision ID
- pieces["short"] = mo.group(3)
-
- else:
- # HEX: no tags
- pieces["closest-tag"] = None
- count_out = run_command(GITS, ["rev-list", "HEAD", "--count"],
- cwd=root)
- pieces["distance"] = int(count_out) # total number of commits
-
- return pieces
-
-
-def plus_or_dot(pieces):
- if "+" in pieces.get("closest-tag", ""):
- return "."
- return "+"
-
-
-def render_pep440(pieces):
- # now build up version string, with post-release "local version
- # identifier". Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you
- # get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty
-
- # exceptions:
- # 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty]
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += plus_or_dot(pieces)
- rendered += "%d.g%s" % (pieces["distance"], pieces["short"])
- if pieces["dirty"]:
- rendered += ".dirty"
- else:
- # exception #1
- rendered = "0+untagged.%d.g%s" % (pieces["distance"],
- pieces["short"])
- if pieces["dirty"]:
- rendered += ".dirty"
- return rendered
-
-
-def render_pep440_pre(pieces):
- # TAG[.post.devDISTANCE] . No -dirty
-
- # exceptions:
- # 1: no tags. 0.post.devDISTANCE
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"]:
- rendered += ".post.dev%d" % pieces["distance"]
- else:
- # exception #1
- rendered = "0.post.dev%d" % pieces["distance"]
- return rendered
-
-
-def render_pep440_post(pieces):
- # TAG[.postDISTANCE[.dev0]+gHEX] . The ".dev0" means dirty. Note that
- # .dev0 sorts backwards (a dirty tree will appear "older" than the
- # corresponding clean one), but you shouldn't be releasing software with
- # -dirty anyways.
-
- # exceptions:
- # 1: no tags. 0.postDISTANCE[.dev0]
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += ".post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- rendered += plus_or_dot(pieces)
- rendered += "g%s" % pieces["short"]
- else:
- # exception #1
- rendered = "0.post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- rendered += "+g%s" % pieces["short"]
- return rendered
-
-
-def render_pep440_old(pieces):
- # TAG[.postDISTANCE[.dev0]] . The ".dev0" means dirty.
-
- # exceptions:
- # 1: no tags. 0.postDISTANCE[.dev0]
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"] or pieces["dirty"]:
- rendered += ".post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- else:
- # exception #1
- rendered = "0.post%d" % pieces["distance"]
- if pieces["dirty"]:
- rendered += ".dev0"
- return rendered
-
-
-def render_git_describe(pieces):
- # TAG[-DISTANCE-gHEX][-dirty], like 'git describe --tags --dirty
- # --always'
-
- # exceptions:
- # 1: no tags. HEX[-dirty] (note: no 'g' prefix)
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- if pieces["distance"]:
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
- else:
- # exception #1
- rendered = pieces["short"]
- if pieces["dirty"]:
- rendered += "-dirty"
- return rendered
-
-
-def render_git_describe_long(pieces):
- # TAG-DISTANCE-gHEX[-dirty], like 'git describe --tags --dirty
- # --always -long'. The distance/hash is unconditional.
-
- # exceptions:
- # 1: no tags. HEX[-dirty] (note: no 'g' prefix)
-
- if pieces["closest-tag"]:
- rendered = pieces["closest-tag"]
- rendered += "-%d-g%s" % (pieces["distance"], pieces["short"])
- else:
- # exception #1
- rendered = pieces["short"]
- if pieces["dirty"]:
- rendered += "-dirty"
- return rendered
-
-
-def render(pieces, style):
- if pieces["error"]:
- return {"version": "unknown",
- "full-revisionid": pieces.get("long"),
- "dirty": None,
- "error": pieces["error"]}
-
- if not style or style == "default":
- style = "pep440" # the default
-
- if style == "pep440":
- rendered = render_pep440(pieces)
- elif style == "pep440-pre":
- rendered = render_pep440_pre(pieces)
- elif style == "pep440-post":
- rendered = render_pep440_post(pieces)
- elif style == "pep440-old":
- rendered = render_pep440_old(pieces)
- elif style == "git-describe":
- rendered = render_git_describe(pieces)
- elif style == "git-describe-long":
- rendered = render_git_describe_long(pieces)
- else:
- raise ValueError("unknown style '%s'" % style)
-
- return {"version": rendered, "full-revisionid": pieces["long"],
- "dirty": pieces["dirty"], "error": None}
-
-
-def get_versions():
- # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
- # __file__, we can work backwards from there to the root. Some
- # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
- # case we can only use expanded keywords.
-
- cfg = get_config()
- verbose = cfg.verbose
-
- try:
- return git_versions_from_keywords(get_keywords(), cfg.tag_prefix,
- verbose)
- except NotThisMethod:
- pass
-
- try:
- root = os.path.realpath(__file__)
- # versionfile_source is the relative path from the top of the source
- # tree (where the .git directory might live) to this file. Invert
- # this to find the root from __file__.
- for i in cfg.versionfile_source.split('/'):
- root = os.path.dirname(root)
- except NameError:
- return {"version": "0+unknown", "full-revisionid": None,
- "dirty": None,
- "error": "unable to find root of source tree"}
-
- try:
- pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)
- return render(pieces, cfg.style)
- except NotThisMethod:
- pass
-
- try:
- if cfg.parentdir_prefix:
- return versions_from_parentdir(cfg.parentdir_prefix, root, verbose)
- except NotThisMethod:
- pass
-
- return {"version": "0+unknown", "full-revisionid": None,
- "dirty": None,
- "error": "unable to compute version"}
diff --git a/fretbursts/burst_plot.py b/fretbursts/burst_plot.py
index 162d440d..589ac475 100644
--- a/fretbursts/burst_plot.py
+++ b/fretbursts/burst_plot.py
@@ -34,18 +34,17 @@
import warnings
from itertools import cycle
from collections.abc import Iterable
+from functools import wraps
# Numeric imports
import numpy as np
from numpy import arange, r_
from scipy.stats import norm as norm
-from scipy.stats import erlang
+from scipy.stats import erlang, gaussian_kde
from scipy.interpolate import UnivariateSpline
# Graphics imports
import matplotlib.pyplot as plt
-from matplotlib.pyplot import (plot, hist, xlabel, ylabel, grid, title, legend,
- gca, gcf)
from matplotlib.patches import Rectangle, Ellipse
from matplotlib.collections import PatchCollection, PolyCollection
from matplotlib.offsetbox import AnchoredText
@@ -90,6 +89,19 @@
##
# Utility functions
#
+
+def _ax_intercept(func):
+ """
+ Wrapper that grabs the ax keyword argument and if None or not specified,
+ it calls plt.gca() and adds/replaces ax argument
+ """
+ @wraps(func)
+ def inner(*args, **kwargs):
+ if 'ax' not in kwargs or kwargs['ax'] is None:
+ kwargs['ax'] = plt.gca()
+ return func(*args, **kwargs)
+ return inner
+
def _normalize_kwargs(kwargs, kind='patch'):
"""Convert matplotlib keywords from short to long form."""
if kwargs is None:
@@ -99,6 +111,9 @@ def _normalize_kwargs(kwargs, kind='patch'):
long_names = dict(c='color', ls='linestyle', lw='linewidth',
mec='markeredgecolor', mew='markeredgewidth',
mfc='markerfacecolor', ms='markersize',)
+ elif kind == 'scatter':
+ long_names = dict(ls='linestyle', lw='linewidth',
+ ec='edgecolor', color='c')
elif kind == 'patch':
long_names = dict(c='color', ls='linestyle', lw='linewidth',
ec='edgecolor', fc='facecolor',)
@@ -115,40 +130,49 @@ def bsavefig(d, s):
# Multi-channel plot functions
#
-def mch_plot_bg(d, **kwargs):
+@_ax_intercept
+def mch_plot_bg(d, ax=None, **kwargs):
"""Plot background vs channel for DA, D and A photons."""
bg = d.bg_from(Ph_sel('all'))
bg_dd = d.bg_from(Ph_sel(Dex='Dem'))
bg_ad = d.bg_from(Ph_sel(Dex='Aem'))
- plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg], lw=2, color=blue,
+ ax.plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg], lw=2, color=blue,
label=' T', **kwargs)
- plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg_dd], color=green, lw=2,
+ ax.plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg_dd], color=green, lw=2,
label=' D', **kwargs)
- plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg_ad], color=red, lw=2,
+ ax.plot(r_[1:d.nch+1], [b.mean()*1e-3 for b in bg_ad], color=red, lw=2,
label=' A', **kwargs)
- xlabel("CH"); ylabel("kcps"); grid(True); legend(loc='best')
- title(d.name)
+ ax.set_xlabel("CH")
+ ax.set_ylabel("kcps")
+ ax.grid(True)
+ ax.legend(loc='best')
+ ax.set_title(d.name)
-def mch_plot_bg_ratio(d):
+
+@_ax_intercept
+def mch_plot_bg_ratio(d, ax=None):
"""Plot ratio of A over D background vs channel."""
bg_dd = d.bg_from(Ph_sel(Dex='Dem'))
bg_ad = d.bg_from(Ph_sel(Dex='Aem'))
- plot(r_[1:d.nch+1],
- [ba.mean()/bd.mean() for bd, ba in zip(bg_dd, bg_ad)],
- color=green, lw=2, label='A/D')
- xlabel("CH"); ylabel("BG Ratio A/D"); grid(True)
- title("BG Ratio A/D "+d.name)
+ ax.plot(r_[1:d.nch+1],
+ [ba.mean()/bd.mean() for bd, ba in zip(bg_dd, bg_ad)],
+ color=green, lw=2, label='A/D')
+ ax.set_xlabel("CH"); ax.set_ylabel("BG Ratio A/D"); ax.grid(True)
+ ax.set_title("BG Ratio A/D "+d.name)
+
-def mch_plot_bsize(d):
+@_ax_intercept
+def mch_plot_bsize(d, ax=None):
"""Plot mean burst size vs channel."""
CH = np.arange(1, d.nch+1)
- plot(CH, [b.mean() for b in d.nt], color=blue, lw=2, label=' T')
- plot(CH, [b.mean() for b in d.nd], color=green, lw=2, label=' D')
- plot(CH, [b.mean() for b in d.na], color=red, lw=2, label=' A')
- xlabel("CH"); ylabel("Mean burst size")
- grid(True)
- legend(loc='best')
- title(d.name)
+ ax.plot(CH, [b.mean() for b in d.nt], color=blue, lw=2, label=' T')
+ ax.plot(CH, [b.mean() for b in d.nd], color=green, lw=2, label=' D')
+ ax.plot(CH, [b.mean() for b in d.na], color=red, lw=2, label=' A')
+ ax.set_xlabel("CH")
+ ax.set_ylabel("Mean burst size")
+ ax.grid(True)
+ ax.legend(loc='best')
+ ax.set_title(d.name)
##
@@ -169,6 +193,7 @@ def plot_alternation_hist(d, bins=None, ax=None, **kwargs):
plot_alternation = plot_alternation_hist_usalex
plot_alternation(d, bins=bins, ax=ax, **kwargs)
+@_ax_intercept
def plot_alternation_hist_usalex(d, bins=None, ax=None, ich=0,
hist_style={}, span_style={}):
"""Plot the us-ALEX alternation histogram for the variable `d`.
@@ -176,9 +201,6 @@ def plot_alternation_hist_usalex(d, bins=None, ax=None, ich=0,
This function must be called on us-ALEX data **before** calling
:func:`fretbursts.loader.alex_apply_period`.
"""
- if ax is None:
- _, ax = plt.subplots()
-
if bins is None:
bins = 100
@@ -216,6 +238,8 @@ def plot_alternation_hist_usalex(d, bins=None, ax=None, ich=0,
ax.axvspan(A_ON[0], period, color=red, **span_style_)
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), frameon=False)
+
+@_ax_intercept
def plot_alternation_hist_nsalex(d, bins=None, ax=None, ich=0,
hist_style={}, span_style={}):
"""Plot the ns-ALEX alternation histogram for the variable `d`.
@@ -223,9 +247,6 @@ def plot_alternation_hist_nsalex(d, bins=None, ax=None, ich=0,
This function must be called on ns-ALEX data **before** calling
:func:`fretbursts.loader.alex_apply_period`.
"""
- if ax is None:
- _, ax = plt.subplots()
-
if bins is None:
bins = np.arange(d.nanotimes_params[ich]['tcspc_num_bins'])
@@ -270,6 +291,7 @@ def plot_alternation_hist_nsalex(d, bins=None, ax=None, ich=0,
#
def _burst_info(d, ich, burst_index):
+ """Generates burst information message for the burst in data.mburst[ich][burst_index]"""
burst = d.mburst[ich][burst_index]
params = dict(
b_index=burst_index,
@@ -291,7 +313,7 @@ def _burst_info(d, ich, burst_index):
return msg.format(**params)
-def _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=1e3, pmin=0, color="#999999",
+def _plot_bursts(d, i, tmin_clk, tmax_clk, ax, pmax=1e3, pmin=0, color="#999999",
ytext=20):
"""Highlights bursts in a timetrace plot."""
b = d.mburst[i]
@@ -304,7 +326,7 @@ def _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=1e3, pmin=0, color="#999999",
end = bs.stop * d.clk_p
R = []
width = end - start
- ax = gca()
+ #TODO: decide how to use axvspan or other better function
for b, bidx, s, w, sign, va in zip(bs, burst_indices, start, width,
cycle([-1, 1]),
cycle(['top', 'bottom'])):
@@ -317,7 +339,7 @@ def _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=1e3, pmin=0, color="#999999",
ax.add_artist(PatchCollection(R, lw=0, color=color))
-def _plot_rate_th(d, i, F, ph_sel, invert=False, scale=1,
+def _plot_rate_th(d, i, F, ph_sel, ax, invert=False, scale=1,
plot_style_={}, rate_th_style={}):
"""Plots background_rate*F as a function of time.
@@ -342,7 +364,7 @@ def _plot_rate_th(d, i, F, ph_sel, invert=False, scale=1,
y_rate *= scale
if invert:
y_rate *= -1
- plot(x_rate, y_rate, **rate_th_style_)
+ ax.plot(x_rate, y_rate, **rate_th_style_)
def _gui_timetrace_burst_sel(d, fig, ax):
@@ -361,12 +383,13 @@ def _gui_timetrace_scroll(fig):
gui_status['scroll_gui'] = ScrollingToolQT(fig)
+@_ax_intercept
def timetrace_single(d, i=0, binwidth=1e-3, bins=None, tmin=0, tmax=200,
ph_sel=Ph_sel('all'), invert=False, bursts=False,
burst_picker=True, scroll=False, cache_bins=True,
plot_style=None, show_rate_th=True, F=None,
rate_th_style={}, set_ax_limits=True,
- burst_color='#BBBBBB'):
+ burst_color='#BBBBBB', ax=None):
"""Plot the timetrace (histogram) of timestamps for a photon selection.
See :func:`timetrace` to plot multiple photon selections (i.e.
@@ -423,7 +446,7 @@ def _has_cache_for(binwidth, tmin, tmax):
# Plot bursts
if bursts:
- _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=500, pmin=-500,
+ _plot_bursts(d, i, tmin_clk, tmax_clk, ax, pmax=500, pmin=-500,
color=burst_color)
# Plot timetrace
@@ -434,37 +457,38 @@ def _has_cache_for(binwidth, tmin, tmax):
else:
plot_style_['label'] = str(ph_sel)
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
- plot(x, timetrace, **plot_style_)
+ ax.plot(x, timetrace, **plot_style_)
# Plot burst-search rate-threshold
if show_rate_th and 'bg' in d:
- _plot_rate_th(d, i, F=F, ph_sel=ph_sel, invert=invert,
+ _plot_rate_th(d, i, F=F, ph_sel=ph_sel, ax=ax, invert=invert,
scale=binwidth, plot_style_=plot_style_,
rate_th_style=rate_th_style)
- plt.xlabel('Time (s)')
- plt.ylabel('# ph')
+ ax.set_xlabel('Time (s)')
+ ax.set_ylabel('# ph')
if burst_picker and 'mburst' in d:
- _gui_timetrace_burst_sel(d, gcf(), gca())
+ _gui_timetrace_burst_sel(d, ax.figure, ax)
if scroll:
- _gui_timetrace_scroll(gcf())
+ _gui_timetrace_scroll(ax.figure)
if set_ax_limits:
- plt.xlim(tmin, tmin + 1)
+ ax.set_xlim(tmin, tmin + 1)
if not invert:
- plt.ylim(top=100)
+ ax.set_ylim(top=100)
else:
- plt.ylim(bottom=-100)
+ ax.set_ylim(bottom=-100)
_plot_status['timetrace_single'] = {'autoscale': False}
# do not concatenate, timetrace should always be shown per channel
+@_ax_intercept
def timetrace(d, i=0, binwidth=1e-3, bins=None, tmin=0, tmax=200,
bursts=False, burst_picker=True, scroll=False,
show_rate_th=True, F=None, rate_th_style={'label': None},
show_aa=True, legend=False, set_ax_limits=True,
burst_color='#BBBBBB', plot_style=None,
#dd_plot_style={}, ad_plot_style={}, aa_plot_style={}
- ):
+ ax=None):
"""Plot the timetraces (histogram) of photon timestamps.
Arguments:
@@ -498,11 +522,12 @@ def timetrace(d, i=0, binwidth=1e-3, bins=None, tmin=0, tmax=200,
burst_color (string): string containing the the HEX RGB color to use
to highlight the burst regions.
plot_style (dict): matplotlib's style for the timetrace lines.
+ ax (mpl.axes): axis where plot will be generated
"""
# Plot bursts
if bursts:
tmin_clk, tmax_clk = tmin / d.clk_p, tmax / d.clk_p
- _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=500, pmin=-500,
+ _plot_bursts(d, i, tmin_clk, tmax_clk, ax, pmax=500, pmin=-500,
color=burst_color)
# Plot multiple timetraces
@@ -523,18 +548,19 @@ def timetrace(d, i=0, binwidth=1e-3, bins=None, tmin=0, tmax=200,
tmax=tmax, ph_sel=ph_sel, invert=invert, bursts=False,
burst_picker=burst_picker_list[ix],
scroll=scroll_list[ix], cache_bins=True,
- show_rate_th=show_rate_th, F=F,
+ show_rate_th=show_rate_th, F=F, ax=ax,
rate_th_style=rate_th_style, set_ax_limits=set_ax_limits,
plot_style=plot_style)
if legend:
- plt.legend(loc='best', fancybox=True)
+ ax.legend(loc='best', fancybox=True)
+@_ax_intercept
def ratetrace_single(d, i=0, m=None, max_num_ph=1e6, tmin=0, tmax=200,
ph_sel=Ph_sel('all'), invert=False, bursts=False,
burst_picker=True, scroll=False, plot_style={},
show_rate_th=True, F=None, rate_th_style={},
- set_ax_limits=True, burst_color='#BBBBBB'):
+ set_ax_limits=True, burst_color='#BBBBBB', ax=None):
"""Plot the ratetrace of timestamps for a photon selection.
See :func:`ratetrace` to plot multiple photon selections (i.e.
@@ -575,35 +601,36 @@ def ratetrace_single(d, i=0, m=None, max_num_ph=1e6, tmin=0, tmax=200,
plot_style_['color'] = _ph_sel_color_dict[ph_sel]
plot_style_['label'] = _ph_sel_label_dict[ph_sel]
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
- plot(times, rates, **plot_style_)
+ ax.plot(times, rates, **plot_style_)
# Plot burst-search rate-threshold
if show_rate_th and 'bg' in d:
- _plot_rate_th(d, i, F=F, scale=1e-3, ph_sel=ph_sel, invert=invert,
+ _plot_rate_th(d, i, F=F, ph_sel=ph_sel, ax=ax, scale=1e-3, invert=invert,
plot_style_=plot_style_, rate_th_style=rate_th_style)
- plt.xlabel('Time (s)')
- plt.ylabel('Rate (kcps)')
+ ax.set_xlabel('Time (s)')
+ ax.set_ylabel('Rate (kcps)')
if burst_picker:
- _gui_timetrace_burst_sel(d, gcf(), gca())
+ _gui_timetrace_burst_sel(d, ax.figure, ax)
if scroll:
- _gui_timetrace_scroll(gcf())
+ _gui_timetrace_scroll(ax.figure)
if set_ax_limits:
- plt.xlim(tmin, tmin + 1)
+ ax.set_xlim(tmin, tmin + 1)
if not invert:
- plt.ylim(top=100)
+ ax.set_ylim(top=100)
else:
- plt.ylim(bottom=-100)
+ ax.set_ylim(bottom=-100)
_plot_status['ratetrace_single'] = {'autoscale': False}
# same, must be plotted per channel always
+@_ax_intercept
def ratetrace(d, i=0, m=None, max_num_ph=1e6, tmin=0, tmax=200,
bursts=False, burst_picker=True, scroll=False,
show_rate_th=True, F=None, rate_th_style={'label': None},
show_aa=True, legend=False, set_ax_limits=True,
#dd_plot_style={}, ad_plot_style={}, aa_plot_style={}
- burst_color='#BBBBBB'):
+ burst_color='#BBBBBB', ax=None):
"""Plot the rate timetraces of photon timestamps.
Arguments:
@@ -634,11 +661,12 @@ def ratetrace(d, i=0, m=None, max_num_ph=1e6, tmin=0, tmax=200,
timetrace.
burst_color (string): string containing the the HEX RGB color to use
to highlight the burst regions.
+ ax (mpl.axes): axis where plot will be generated
"""
# Plot bursts
if bursts:
tmin_clk, tmax_clk = tmin / d.clk_p, tmax / d.clk_p
- _plot_bursts(d, i, tmin_clk, tmax_clk, pmax=500, pmin=-500,
+ _plot_bursts(d, i, tmin_clk, tmax_clk, ax, pmax=500, pmin=-500,
color=burst_color)
# Plot multiple timetraces
@@ -659,10 +687,10 @@ def ratetrace(d, i=0, m=None, max_num_ph=1e6, tmin=0, tmax=200,
tmax=tmax, ph_sel=ph_sel, invert=invert, bursts=False,
burst_picker=burst_picker_list[ix],
scroll=scroll_list[ix],
- show_rate_th=show_rate_th, F=F,
+ show_rate_th=show_rate_th, F=F, ax=ax,
rate_th_style=rate_th_style, set_ax_limits=set_ax_limits)
if legend:
- plt.legend(loc='best', fancybox=True)
+ ax.legend(loc='best', fancybox=True)
def sort_burst_sizes(sizes, levels=np.arange(1, 102, 20)):
@@ -676,7 +704,8 @@ def sort_burst_sizes(sizes, levels=np.arange(1, 102, 20)):
return masks
# plot per channel always
-def timetrace_fret(d, i=0, gamma=1., **kwargs):
+@_ax_intercept
+def timetrace_fret(d, i=0, gamma=1., ax=None, **kwargs):
"""Timetrace of burst FRET vs time. Uses `plot`."""
b = d.mburst[i]
bsizes = d.burst_sizes_ich(ich=i, gamma=gamma)
@@ -688,25 +717,29 @@ def timetrace_fret(d, i=0, gamma=1., **kwargs):
t, E = b.start*d.clk_p, d.E[i]
levels = sort_burst_sizes(bsizes)
for ilev, level in enumerate(levels):
- plt.plot(t[level], E[level], ms=np.sqrt((ilev+1)*15),
+ ax.plot(t[level], E[level], ms=np.sqrt((ilev+1)*15),
**style_kwargs)
- plt.plot(b.start*d.clk_p, d.E[i], '-k', alpha=0.1, lw=1)
- xlabel('Time (s)'); ylabel('E')
- _gui_timetrace_burst_sel(d, gcf(), gca())
+ ax.plot(b.start*d.clk_p, d.E[i], '-k', alpha=0.1, lw=1)
+ ax.set_xlabel('Time (s)')
+ ax.set_ylabel('E')
+ _gui_timetrace_burst_sel(d, ax.figure, ax)
# plot per channel always
-def timetrace_fret_scatter(d, i=0, gamma=1., **kwargs):
+@_ax_intercept
+def timetrace_fret_scatter(d, i=0, gamma=1., ax=None, **kwargs):
"""Timetrace of burst FRET vs time. Uses `scatter` (slow)."""
b = d.mburst[i]
bsizes = d.burst_sizes_ich(ich=i, gamma=gamma)
style_kwargs = dict(s=bsizes, marker='o', alpha=0.5)
style_kwargs.update(**kwargs)
- plt.scatter(b.start*d.clk_p, d.E[i], **style_kwargs)
- xlabel('Time (s)'); ylabel('E')
+ ax.scatter(b.start*d.clk_p, d.E[i], **style_kwargs)
+ ax.set_xlabel('Time (s)')
+ ax.set_ylabel('E')
# plot per channel always
-def timetrace_bg(d, i=0, nolegend=False, ncol=2, plot_style={}, show_da=False):
+@_ax_intercept
+def timetrace_bg(d, i=0, nolegend=False, ncol=2, plot_style={}, show_da=False, ax=None):
"""Timetrace of background rates."""
bg = d.bg_from(Ph_sel('all'))
bg_dd = d.bg_from(Ph_sel(Dex='Dem'))
@@ -715,29 +748,30 @@ def timetrace_bg(d, i=0, nolegend=False, ncol=2, plot_style={}, show_da=False):
plot_style_ = dict(linewidth=2, marker='o', markersize=6)
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
label = "T: %d cps" % d.bg_mean[Ph_sel('all')][i]
- plot(t, 1e-3 * bg[i], color='k', label=label, **plot_style_)
+ ax.plot(t, 1e-3 * bg[i], color='k', label=label, **plot_style_)
label = "DD: %d cps" % d.bg_mean[Ph_sel(Dex='Dem')][i]
- plot(t, 1e-3 * bg_dd[i], color=green, label=label, **plot_style_)
+ ax.plot(t, 1e-3 * bg_dd[i], color=green, label=label, **plot_style_)
label = "AD: %d cps" % d.bg_mean[Ph_sel(Dex='Aem')][i]
- plot(t, 1e-3 * bg_ad[i], color=red, label=label, **plot_style_)
+ ax.plot(t, 1e-3 * bg_ad[i], color=red, label=label, **plot_style_)
if d.alternated:
bg_aa = d.bg_from(Ph_sel(Aex='Aem'))
label = "AA: %d cps" % d.bg_mean[Ph_sel(Aex='Aem')][i]
- plot(t, 1e-3 * bg_aa[i], label=label, color=purple, **plot_style_)
+ ax.plot(t, 1e-3 * bg_aa[i], label=label, color=purple, **plot_style_)
if show_da:
bg_da = d.bg_from(Ph_sel(Aex='Dem'))
label = "DA: %d cps" % d.bg_mean[Ph_sel(Aex='Dem')][i]
- plot(t, 1e-3 * bg_da[i], label=label,
+ ax.plot(t, 1e-3 * bg_da[i], label=label,
color=_ph_sel_color_dict[Ph_sel(Aex='Dem')], **plot_style_)
if not nolegend:
- legend(loc='best', frameon=False, ncol=ncol)
- plt.xlabel("Time (s)")
- plt.ylabel("BG rate (kcps)")
- plt.grid(True)
- plt.ylim(bottom=0)
+ ax.legend(loc='best', frameon=False, ncol=ncol)
+ ax.set_xlabel("Time (s)")
+ ax.set_ylabel("BG rate (kcps)")
+ ax.grid(True)
+ ax.set_ylim(bottom=0)
# plot per channel always
-def timetrace_b_rate(d, i=0):
+@_ax_intercept
+def timetrace_b_rate(d, i=0, ax=None):
"""Timetrace of bursts-per-second in each period."""
t = arange(d.bg[i].size)*d.bg_time_s
b_rate = r_[[(d.bp[i] == p).sum() for p in range(d.bp[i].max()+1)]]
@@ -746,13 +780,16 @@ def timetrace_b_rate(d, i=0):
t = t[:-1] # assuming last period without bursts
else:
assert t.size == b_rate.size
- plot(t, b_rate, lw=2, label="CH%d" % (i+1))
- legend(loc='best', fancybox=True, frameon=False, ncol=3)
- xlabel("Time (s)"); ylabel("Burst per second"); grid(True)
- plt.ylim(bottom=0)
+ ax.plot(t, b_rate, lw=2, label="CH%d" % (i+1))
+ ax.legend(loc='best', fancybox=True, frameon=False, ncol=3)
+ ax.set_xlabel("Time (s)")
+ ax.set_ylabel("Burst per second")
+ ax.grid(True)
+ ax.set_ylim(bottom=0)
# plot per channel always
-def time_ph(d, i=0, num_ph=1e4, ph_istart=0):
+@_ax_intercept
+def time_ph(d, i=0, num_ph=1e4, ph_istart=0, ax=None):
"""Plot 'num_ph' ph starting at 'ph_istart' marking burst start/end.
TODO: Update to use the new matplotlib eventplot.
"""
@@ -766,11 +803,11 @@ def time_ph(d, i=0, num_ph=1e4, ph_istart=0):
start, end = b[BSLICE].start, b[BSLICE].stop
u = d.clk_p # time scale
- plt.vlines(ph_d*u, 0, 1, color='k', alpha=0.02)
- plt.vlines(ph_a*u, 0, 1, color='k', alpha=0.02)
- plt.vlines(start*u, -0.5, 1.5, lw=3, color=green, alpha=0.5)
- plt.vlines(end*u, -0.5, 1.5, lw=3, color=red, alpha=0.5)
- xlabel("Time (s)")
+ ax.vlines(ph_d*u, 0, 1, color='k', alpha=0.02)
+ ax.vlines(ph_a*u, 0, 1, color='k', alpha=0.02)
+ ax.vlines(start*u, -0.5, 1.5, lw=3, color=green, alpha=0.5)
+ ax.vlines(end*u, -0.5, 1.5, lw=3, color=red, alpha=0.5)
+ ax.set_xlabel("Time (s)")
##
@@ -785,7 +822,7 @@ def _bins_array(bins):
return bins
# not channel specific hidden function
-def _hist_burst_taildist(data, bins, pdf, weights=None, yscale='log',
+def _hist_burst_taildist(data, bins, pdf, ax, weights=None, yscale='log',
color=None, label=None, plot_style=None, vline=None):
hist = HistData(*np.histogram(data[~np.isnan(data)],
bins=_bins_array(bins), weights=weights))
@@ -799,18 +836,19 @@ def _hist_burst_taildist(data, bins, pdf, weights=None, yscale='log',
if label is not None:
plot_style['label'] = label
default_plot_style.update(_normalize_kwargs(plot_style, kind='line2d'))
- plt.plot(hist.bincenters, ydata, **default_plot_style)
+ ax.plot(hist.bincenters, ydata, **default_plot_style)
if vline is not None:
- plt.axvline(vline, ls='--')
- plt.yscale(yscale)
+ ax.axvline(vline, ls='--')
+ ax.set_yscale(yscale)
if pdf:
- plt.ylabel('PDF')
+ ax.set_ylabel('PDF')
else:
- plt.ylabel('# Bursts')
+ ax.set_ylabel('# Bursts')
+@_ax_intercept
def hist_width(d, i=0, bins=(0, 10, 0.025), pdf=True, weights=None,
- yscale='log', color=None, plot_style=None, vline=None):
+ yscale='log', color=None, plot_style=None, vline=None, ax=None):
"""Plot histogram of burst durations.
Parameters:
@@ -824,6 +862,7 @@ def hist_width(d, i=0, bins=(0, 10, 0.025), pdf=True, weights=None,
plot_style (dict): dict of matplotlib line style passed to `plot`.
vline (float): If not None, plot vertical line at the specified x
position.
+ ax (mpl.axes): axis where plot will be generated
"""
if i is None:
burst_widths = np.concatenate([mb.width for mb in d.mburst]) * d.clk_p * 1e3
@@ -831,16 +870,17 @@ def hist_width(d, i=0, bins=(0, 10, 0.025), pdf=True, weights=None,
weights = weights[i] if weights is not None else None
burst_widths = d.mburst[i].width * d.clk_p * 1e3
- _hist_burst_taildist(burst_widths, bins, pdf, weights=weights, vline=vline,
+ _hist_burst_taildist(burst_widths, bins, pdf, ax, weights=weights, vline=vline,
yscale=yscale, color=color, plot_style=plot_style)
- plt.xlabel('Burst width (ms)')
- plt.xlim(xmin=0)
+ ax.set_xlabel('Burst width (ms)')
+ ax.set_xlim(xmin=0)
+@_ax_intercept
def hist_brightness(d, i=0, bins=(0, 60, 1), pdf=True, weights=None,
yscale='log', gamma=1, add_naa=False, ph_sel=Ph_sel('all'), beta=1.,
donor_ref=True, naa_aexonly=False, naa_comp=False, na_comp=False,
- label_prefix=None, color=None, plot_style=None, vline=None):
+ label_prefix=None, color=None, plot_style=None, vline=None, ax=None):
"""Plot histogram of burst brightness, i.e. burst size / duration.
Parameters:
@@ -871,6 +911,7 @@ def hist_brightness(d, i=0, bins=(0, 60, 1), pdf=True, weights=None,
plot_style (dict): dict of matplotlib line style passed to `plot`.
vline (float): If not None, plot vertical line at the specified x
position.
+ ax (mpl.axes): axis where plot will be generated
"""
weights = weights[i] if weights is not None else None
if plot_style is None:
@@ -894,10 +935,10 @@ def hist_brightness(d, i=0, bins=(0, 60, 1), pdf=True, weights=None,
if 'label' not in plot_style:
plot_style['label'] = label
- _hist_burst_taildist(brightness, bins, pdf, weights=weights, vline=vline,
+ _hist_burst_taildist(brightness, bins, pdf, ax, weights=weights, vline=vline,
yscale=yscale, color=color, plot_style=plot_style)
- plt.xlabel('Burst brightness (kHz)')
- plt.legend(loc='best')
+ ax.set_xlabel('Burst brightness (kHz)')
+ ax.legend(loc='best')
def _get_sizes_and_formula(d, ich, gamma, beta, donor_ref, add_naa,
@@ -927,11 +968,12 @@ def _get_sizes_and_formula(d, ich, gamma, beta, donor_ref, add_naa,
# dependent on _hist_burst_taildist
+@_ax_intercept
def hist_size(d, i=0, which='all', bins=(0, 600, 4), pdf=False, weights=None,
yscale='log', gamma=1, beta=1, donor_ref=True, add_naa=False,
ph_sel=None, naa_aexonly=False, naa_comp=False, na_comp=False,
vline=None, label_prefix=None, legend=True, color=None,
- plot_style=None):
+ plot_style=None, ax=None):
"""Plot histogram of "burst sizes", according to different definitions.
Arguments:
@@ -969,6 +1011,7 @@ def hist_size(d, i=0, which='all', bins=(0, 600, 4), pdf=False, weights=None,
plot_style (dict): dict of matplotlib line style passed to `plot`.
vline (float): If not None, plot vertical line at the specified x
position.
+ ax (mpl.axes): axis where plot will be generated
See also:
- :meth:`fretbursts.burstlib.Data.burst_sizes_ich`.
@@ -1002,14 +1045,15 @@ def hist_size(d, i=0, which='all', bins=(0, 600, 4), pdf=False, weights=None,
elif color is not None:
plot_style['color'] = color
- _hist_burst_taildist(sizes, bins, pdf, weights=weights, yscale=yscale,
+ _hist_burst_taildist(sizes, bins, pdf, ax, weights=weights, yscale=yscale,
plot_style=plot_style, vline=vline)
- plt.xlabel('Burst size')
+ ax.set_xlabel('Burst size')
if legend:
- plt.legend(loc='upper right')
+ ax.legend(loc='upper right')
# depends on _hist_burst_taildist
-def hist_size_all(d, i=0, **kwargs):
+@_ax_intercept
+def hist_size_all(d, i=0, ax=None, **kwargs):
"""Plot burst sizes for all the combinations of photons.
Calls :func:`hist_size` multiple times with different `which` parameters.
@@ -1020,7 +1064,7 @@ def hist_size_all(d, i=0, **kwargs):
elif 'PAX' in d.meas_type:
fields += ['nda', 'naa']
for which in fields:
- hist_size(d, i, which=which, **kwargs)
+ hist_size(d, i, which=which, ax=ax, **kwargs)
def _fitted_E_plot(d, i=0, F=1, no_E=False, ax=None, show_model=True,
@@ -1028,7 +1072,7 @@ def _fitted_E_plot(d, i=0, F=1, no_E=False, ax=None, show_model=True,
alpha=0.5, fillcolor=None):
"""Plot a fitted model overlay on a FRET histogram."""
if ax is None:
- ax2 = gca()
+ ax2 = plt.gca()
else:
ax2 = plt.twinx(ax=ax)
ax2.grid(False)
@@ -1060,9 +1104,11 @@ def _fitted_E_plot(d, i=0, F=1, no_E=False, ax=None, show_model=True,
xtext = 0.6 if d.E_fit[i] < 0.6 else 0.2
if d.nch > 1 and not no_E:
ax2.text(xtext, 0.81, "CH%d: $E_{fit} = %.3f$" % (i+1, d.E_fit[i]),
- transform=gca().transAxes, fontsize=16,
+ transform=ax2.transAxes, fontsize=16,
bbox=dict(boxstyle='round', facecolor='#dedede', alpha=0.5))
+
+@_ax_intercept
def hist_burst_data(
d, i=0, data_name='E', ax=None, binwidth=0.03, bins=None,
vertical=False, pdf=False, hist_style='bar',
@@ -1150,8 +1196,6 @@ def hist_burst_data(
assert data_name in d
fitter_name = data_name + '_fitter'
- if ax is None:
- ax = gca()
ax.set_axisbelow(True)
pline = ax.axhline if vertical else ax.axvline
bar = ax.barh if vertical else ax.bar
@@ -1277,7 +1321,6 @@ def hist_fret(
For detailed documentation see :func:`hist_burst_data`.
"""
-
hist_burst_data(
d, i, data_name='E', ax=ax, binwidth=binwidth, bins=bins,
pdf=pdf, weights=weights, gamma=gamma, add_naa=add_naa,
@@ -1300,12 +1343,13 @@ def hist_S(
show_model=False, show_model_peaks=True,
hist_bar_style=None, hist_plot_style=None, model_plot_style=None,
kde_plot_style=None, verbose=False):
- """Plot S histogram and KDE.
+ """
+ Plot S histogram and KDE.
The most used argument is `binwidth` that sets the histogram bin width.
- For detailed documentation see :func:`hist_burst_data`. """
-
+ For detailed documentation see :func:`hist_burst_data`.
+ """
hist_burst_data(
d, i, data_name='S', ax=ax, binwidth=binwidth, bins=bins,
pdf=pdf, weights=weights, gamma=gamma, add_naa=add_naa,
@@ -1328,12 +1372,12 @@ def _get_fit_text_stats(fit_arr, pylab=True):
return fit_text
+@_ax_intercept
def _plot_fit_text_ch(
fit_arr, ich, fmt_str="CH%d: $E_{fit} = %.3f$", ax=None,
bbox=dict(boxstyle='round', facecolor='#dedede', alpha=0.5),
xtext_low=0.2, xtext_high=0.6, fontsize=16):
"""Plot a text box with ch and fit value."""
- if ax is None: ax = gca()
if ich is None:
xtext = xtext_high if fit_arr[0] < xtext_high else xtext_low
else:
@@ -1342,14 +1386,14 @@ def _plot_fit_text_ch(
transform=ax.transAxes, fontsize=fontsize, bbox=bbox)
+@_ax_intercept
def hist2d_alex(d, i=0, vmin=2, vmax=0, binwidth=0.05, S_max_norm=0.8,
interp='bicubic', cmap='hot', under_color='white',
over_color='white', scatter=True, scatter_ms=3,
scatter_color='orange', scatter_alpha=0.2, gui_sel=False,
- cbar_ax=None, grid_color='#D0D0D0'):
+ cbar_ax=None, grid_color='#D0D0D0', ax=None):
"""Plot 2-D E-S ALEX histogram with a scatterplot overlay.
"""
- ax = plt.gca()
d._calc_alex_hist(binwidth)
ES_hist = np.sum(d.ES_hist, axis=0) if i is None else d.ES_hist[i]
E_bins, S_bins, S_ax = d.E_bins, d.S_bins, d.S_ax
@@ -1372,7 +1416,7 @@ def hist2d_alex(d, i=0, vmin=2, vmax=0, binwidth=0.05, S_max_norm=0.8,
im.cmap.set_under(under_color)
im.cmap.set_over(over_color)
if cbar_ax is None:
- gcf().colorbar(im)
+ ax.figure.colorbar(im)
else:
cbar_ax.colorbar(im)
ax.set_xlim(-0.2, 1.2)
@@ -1382,11 +1426,12 @@ def hist2d_alex(d, i=0, vmin=2, vmax=0, binwidth=0.05, S_max_norm=0.8,
ax.grid(color=grid_color)
if gui_sel:
# the selection object must be saved (otherwise will be destroyed)
- hist2d_alex.gui_sel = gs.rectSelection(gcf(), gca())
+ hist2d_alex.gui_sel = gs.rectSelection(ax.figure, ax)
+@_ax_intercept
def hexbin_alex(d, i=0, vmin=1, vmax=None, gridsize=80, cmap='Spectral_r',
- E_name='E', S_name='S', **hexbin_kwargs):
+ E_name='E', S_name='S', ax=None, **hexbin_kwargs):
"""Plot an hexbin 2D histogram for E-S.
"""
if i is None:
@@ -1399,10 +1444,10 @@ def hexbin_alex(d, i=0, vmin=1, vmax=None, gridsize=80, cmap='Spectral_r',
cmap=cmap, extent=(-0.2, 1.2, -0.2, 1.2), mincnt=1)
if hexbin_kwargs is not None:
hexbin_kwargs_.update(_normalize_kwargs(hexbin_kwargs))
- poly = plt.hexbin(E, S, **hexbin_kwargs_)
+ poly = ax.hexbin(E, S, **hexbin_kwargs_)
poly.set_clim(vmin, vmax)
- plt.xlabel('E')
- plt.ylabel('S')
+ ax.set_xlabel('E')
+ ax.set_ylabel('S')
# channel independent
def plot_ES_selection(ax, E1, E2, S1, S2, rect=True, **kwargs):
@@ -1456,10 +1501,13 @@ def get_ES_range():
print('E1={E1:.3}, E2={E2:.3}, S1={S1:.3}, S2={S2:.3}'.format(**sel))
return sel
+
+
+@_ax_intercept
def hist_interphoton_single(d, i=0, binwidth=1e-4, tmax=None, bins=None,
ph_sel=Ph_sel('all'), period=None,
yscale='log', xscale='linear', xunit='ms',
- plot_style=None):
+ plot_style=None, ax=None):
"""Plot histogram of interphoton delays for a single photon streams.
Arguments:
@@ -1489,6 +1537,7 @@ def hist_interphoton_single(d, i=0, binwidth=1e-4, tmax=None, bins=None,
'us', 'ns'. Default 'ms'.
plot_style (dict): keyword arguments to be passed to matplotlib's
`plot` function. Used to customize the plot style.
+ ax (mpl.axes): axis where plot will be generated
"""
unit_dict = {'s': 1, 'ms': 1e3, 'us': 1e6, 'ns': 1e9}
assert xunit in unit_dict
@@ -1529,26 +1578,27 @@ def hist_interphoton_single(d, i=0, binwidth=1e-4, tmax=None, bins=None,
plot_style_['color'] = _ph_sel_color_dict[ph_sel]
plot_style_['label'] = _ph_sel_label_dict[ph_sel]
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
- plot(t_ax[:n_trim] * scalex, counts[:n_trim], **plot_style_)
+ ax.plot(t_ax[:n_trim] * scalex, counts[:n_trim], **plot_style_)
if yscale == 'log':
- gca().set_yscale(yscale)
- plt.ylim(1)
+ ax.set_yscale(yscale)
+ ax.set_ylim(1)
_plot_status['hist_interphoton_single'] = {'autoscale': False}
if xscale == 'log':
- gca().set_xscale(yscale)
- plt.xlim(0.5 * binwidth)
+ ax.set_xscale(yscale)
+ ax.set_xlim(0.5 * binwidth)
_plot_status['hist_interphoton_single'] = {'autoscale': False}
- plt.xlabel('Inter-photon delays (%s)' % xunit.replace('us', 'μs'))
- plt.ylabel('# Delays')
+ ax.set_xlabel('Inter-photon delays (%s)' % xunit.replace('us', 'μs'))
+ ax.set_ylabel('# Delays')
# Return internal variables so that other functions can extend the plot
return dict(counts=counts, n_trim=n_trim, plot_style_=plot_style_,
t_ax=t_ax, scalex=scalex)
+@_ax_intercept
def hist_interphoton(d, i=0, binwidth=1e-4, tmax=None, bins=None, period=None,
yscale='log', xscale='linear', xunit='ms', plot_style=None,
- show_da=False, legend=True):
+ show_da=False, legend=True, ax=None):
"""Plot histogram of photon interval for different photon streams.
Arguments:
@@ -1580,6 +1630,7 @@ def hist_interphoton(d, i=0, binwidth=1e-4, tmax=None, bins=None, period=None,
show_da (bool): If False (default) do not plot the AexDem photon stream.
Ignored when the measurement is not ALEX.
legend (bool): If True (default) plot a legend.
+ ax (mpl.axes): axis where plot will be generated
"""
# Plot multiple timetraces
ph_sel_list = [Ph_sel('all'), Ph_sel(Dex='Dem'), Ph_sel(Dex='Aem')]
@@ -1594,18 +1645,20 @@ def hist_interphoton(d, i=0, binwidth=1e-4, tmax=None, bins=None, period=None,
hist_interphoton_single(d, i=i, binwidth=binwidth, tmax=tmax,
bins=bins, period=period, ph_sel=ph_sel,
yscale=yscale, xscale=xscale, xunit=xunit,
- plot_style=plot_style)
+ plot_style=plot_style, ax=ax)
if legend:
- plt.legend(loc='best', fancybox=True)
+ ax.legend(loc='best', fancybox=True)
if yscale == 'log' or xscale == 'log':
_plot_status['hist_interphoton'] = {'autoscale': False}
+
# TODO: condsider better method for displaying all channel, total bg histogram
+@_ax_intercept
def hist_bg_single(d, i=0, binwidth=1e-4, tmax=0.01, bins=None,
ph_sel=Ph_sel('all'), period=0,
yscale='log', xscale='linear', xunit='ms', plot_style=None,
- show_fit=True, fit_style=None, manual_rate=None):
+ show_fit=True, fit_style=None, manual_rate=None, ax=None):
"""Plot histogram of photon interval for a single photon streams.
Optionally plots the fitted background as an exponential curve.
@@ -1619,6 +1672,7 @@ def hist_bg_single(d, i=0, binwidth=1e-4, tmax=0.01, bins=None,
rate (ignoring the value saved in Data).
fit_style (dict): arguments passed to matplotlib's `plot` for
for plotting the exponential curve.
+ ax (mpl.axes): axis where plot will be generated
For a description of all the other arguments see
:func:`hist_interphoton_single`.
@@ -1626,7 +1680,7 @@ def hist_bg_single(d, i=0, binwidth=1e-4, tmax=0.01, bins=None,
hist = hist_interphoton_single(d, i=i, binwidth=binwidth, tmax=tmax,
bins=bins, ph_sel=ph_sel, period=period,
yscale=yscale, xscale=xscale, xunit=xunit,
- plot_style=None)
+ plot_style=None, ax=ax)
if show_fit or manual_rate is not None:
# Compute the fit function
@@ -1650,13 +1704,14 @@ def hist_bg_single(d, i=0, binwidth=1e-4, tmax=0.01, bins=None,
label = str(ph_sel) if plt_label is None else plt_label
fit_style_['label'] = '%s, %.2f kcps' % (label, bg_rate * 1e-3)
n_trim = hist['n_trim']
- plot(hist['t_ax'][:n_trim] * hist['scalex'], y_fit[:n_trim],
+ ax.plot(hist['t_ax'][:n_trim] * hist['scalex'], y_fit[:n_trim],
**fit_style_)
+@_ax_intercept
def hist_bg(d, i=0, binwidth=1e-4, tmax=0.01, bins=None, period=0,
yscale='log', xscale='linear', xunit='ms', plot_style=None,
- show_da=False, legend=True, show_fit=True, fit_style=None):
+ show_da=False, legend=True, show_fit=True, fit_style=None, ax=None):
"""Plot histogram of photon interval for different photon streams.
Optionally plots the fitted background.
@@ -1668,6 +1723,7 @@ def hist_bg(d, i=0, binwidth=1e-4, tmax=0.01, bins=None, period=0,
exponential distribution.
fit_style (dict): arguments passed to matplotlib's `plot` for
for plotting the exponential curve.
+ ax (mpl.axes): axis where plot will be generated
For a description of all the other arguments see :func:`hist_interphoton`.
"""
@@ -1683,17 +1739,18 @@ def hist_bg(d, i=0, binwidth=1e-4, tmax=0.01, bins=None, period=0,
hist_bg_single(d, i=i, period=period, binwidth=binwidth,
bins=bins, tmax=tmax, ph_sel=ph_sel, xunit=xunit,
show_fit=show_fit, yscale=yscale, xscale=xscale,
- plot_style=plot_style, fit_style=fit_style)
+ plot_style=plot_style, fit_style=fit_style, ax=ax)
if legend:
- plt.legend(loc='best', fancybox=True)
+ ax.legend(loc='best', fancybox=True)
if yscale == 'log' or xscale == 'log':
_plot_status['hist_bg'] = {'autoscale': False}
+@_ax_intercept
def hist_ph_delays(
d, i=0, time_min_s=0, time_max_s=30, bin_width_us=10, mask=None,
- yscale='log', hfit_bin_ms=1, efit_tail_min_us=1000, **kwargs):
+ yscale='log', hfit_bin_ms=1, efit_tail_min_us=1000, ax=None, **kwargs):
"""Histogram of ph delays and comparison with 3 BG fitting functions.
"""
if i is None:
@@ -1715,9 +1772,9 @@ def hist_ph_delays(
ph = ph[mask[i]]
ph = ph[(ph < time_max_s/d.clk_p)*(ph > time_min_s/d.clk_p)]
dph = np.diff(ph)*d.clk_p
- H = hist(dph*1e6, bins=r_[0:1200:bin_width_us], histtype='step', **kwargs)
- gca().set_yscale('log')
- xlabel(u'Ph delay time (μs)'); ylabel("# Ph")
+ H = ax.hist(dph*1e6, bins=r_[0:1200:bin_width_us], histtype='step', **kwargs)
+ ax.set_yscale('log')
+ ax.set_xlabel(u'Ph delay time (μs)'); ax.set_ylabel("# Ph")
F = 1 if 'normed' in kwargs else H[0].sum()*(bin_width_us)
efun = lambda t, r: np.exp(-r*t)*r
@@ -1739,39 +1796,31 @@ def hist_ph_delays(
t = r_[0:1200]*1e-6
if rc_do:
- plot(t*1e6, 0.65*F*efun(t, rc)*1e-6, lw=3, alpha=0.5, color=purple,
+ ax.plot(t*1e6, 0.65*F*efun(t, rc)*1e-6, lw=3, alpha=0.5, color=purple,
label="%d cps - Exp CDF (tail_min_p=%.2f)" % (rc, efit_tail_min_us))
if re_do:
- plot(t*1e6, 0.65*F*efun(t, re)*1e-6, lw=3, alpha=0.5, color=red,
- label="%d cps - Exp ML (tail_min_p=%.2f)" % (re, efit_tail_min_us))
+ ax.plot(t*1e6, 0.65*F*efun(t, re)*1e-6, lw=3, alpha=0.5, color=red,
+ label="%d cps - Exp ML (tail_min_p=%.2f)" % (re, efit_tail_min_us))
if re_do and rg_do:
- plot(t*1e6, 0.68*F*efun(t, rg)*1e-6, lw=3, alpha=0.5, color=green,
- label=u"%d cps - Hist (bin_ms=%d) [Δ=%d%%]" % (hfit_bin_ms, rg,
+ ax.plot(t*1e6, 0.68*F*efun(t, rg)*1e-6, lw=3, alpha=0.5, color=green,
+ label=u"%d cps - Hist (bin_ms=%d) [Δ=%d%%]" % (hfit_bin_ms, rg,
100*(rg-re)/re))
- plt.legend(loc='best', fancybox=True)
+ ax.legend(loc='best', fancybox=True)
# TODO: update for concatenated data, probably fix bext.calc_mdelays_hist
+@_ax_intercept
def hist_mdelays(d, i=0, m=10, bins_s=(0, 10, 0.02), period=0,
hold=False, bg_ppf=0.01, ph_sel=Ph_sel('all'), spline=True,
- s=1., bg_fit=True, bg_F=0.8):
+ s=1., bg_fit=True, bg_F=0.8, ax=None):
"""Histogram of m-photons delays (all-ph vs in-burst ph).
"""
- ax = gca()
if not hold:
#ax.clear()
for _ind in range(len(ax.lines)): ax.lines.pop()
- if i is None:
- results = np.concatenate([bext.calc_mdelays_hist(d, ich=j, m=m, period=period,
- bins_s=bins_s,ph_sel=ph_sel,
- bursts=True, bg_fit=bg_fit,
- bg_F=bg_F)
- for j in range(d.nch)])
- else:
- results = bext.calc_mdelays_hist(d, ich=i, m=m, period=period, bins_s=bins_s,
+ results = bext.calc_mdelays_hist(d, ich=i, m=m, period=period, bins_s=bins_s,
ph_sel=ph_sel, bursts=True, bg_fit=bg_fit, bg_F=bg_F)
- bin_x, histog_y = results[:2]
- bg_dist = results[2]
+ bin_x, histog_y, bg_dist = results[:3]
rate_ch_kcps = 1./bg_dist.kwds['scale'] # extract the rate
if bg_fit:
a, rate_kcps = results[3:5]
@@ -1805,35 +1854,36 @@ def hist_mdelays(d, i=0, m=10, bins_s=(0, 10, 0.02), period=0,
burst_integral = np.trapz(x=bin_x[burst_domain],
y=mdelays_hist_y[burst_domain])
- title("I = %.1f %%" % (burst_integral*100), fontsize='small')
+ ax.set_title("I = %.1f %%" % (burst_integral*100), fontsize='small')
#text(0.8,0.8,"I = %.1f %%" % (integr*100), transform = gca().transAxes)
## MDelays plot
- plot(bin_x, mdelays_pdf_y, lw=2, color=blue, alpha=0.5,
- label="Delays dist.")
- plot(bin_x, mdelays_b_pdf_y, lw=2, color=red, alpha=0.5,
- label="Delays dist. (in burst)")
- plt.axvline(max_delay_th_P, color='k',
- label="BG ML dist. @ %.1f%%" % (bg_ppf*100))
- plt.axvline(max_delay_th_F, color=purple,
- label="BS threshold (F=%d)" % d.F)
+ ax.plot(bin_x, mdelays_pdf_y, lw=2, color=blue, alpha=0.5,
+ label="Delays dist.")
+ ax.plot(bin_x, mdelays_b_pdf_y, lw=2, color=red, alpha=0.5,
+ label="Delays dist. (in burst)")
+ ax.axvline(max_delay_th_P, color='k',
+ label="BG ML dist. @ %.1f%%" % (bg_ppf*100))
+ ax.axvline(max_delay_th_F, color=purple,
+ label="BS threshold (F=%d)" % d.F)
## Bg distribution plots
bg_dist_y = bg_dist.pdf(bin_x)
ibin_x_bg_mean = np.abs(bin_x - bg_dist.mean()).argmin()
bg_dist_y *= mdelays_pdf_y[ibin_x_bg_mean]/bg_dist_y[ibin_x_bg_mean]
- plot(bin_x, bg_dist_y, '--k', alpha=1.,
- label='BG ML dist.')
- plt.axvline(bg_dist.mean(), color='k', ls='--', label="BG mean")
+ ax.plot(bin_x, bg_dist_y, '--k', alpha=1.,
+ label='BG ML dist.')
+ ax.axvline(bg_dist.mean(), color='k', ls='--', label="BG mean")
if bg_fit:
bg_y = a*erlang.pdf(bin_x, a=m, scale=1./rate_kcps)
- plot(bin_x, bg_y, '--k', alpha=1.)
- plt.legend(ncol=2, frameon=False)
- xlabel("Time (ms)")
+ ax.plot(bin_x, bg_y, '--k', alpha=1.)
+ ax.legend(ncol=2, frameon=False)
+ ax.set_xlabel("Time (ms)")
+@_ax_intercept
def hist_mrates(d, i=0, m=10, bins=(0, 4000, 100), yscale='log', pdf=False,
- dense=True, plot_style=None):
+ dense=True, plot_style=None, ax=None):
"""Histogram of m-photons rates. See also :func:`hist_mdelays`.
"""
if i is None:
@@ -1853,13 +1903,15 @@ def hist_mrates(d, i=0, m=10, bins=(0, 4000, 100), yscale='log', pdf=False,
ydata = hist.pdf if pdf else hist.counts
plot_style_ = dict(marker='o')
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
- plot(hist.bincenters, ydata, **plot_style_)
- gca().set_yscale(yscale)
- xlabel("Rates (kcps)")
+ ax.plot(hist.bincenters, ydata, **plot_style_)
+ ax.set_yscale(yscale)
+ ax.set_xlabel("Rates (kcps)")
+
## Bursts stats
+@_ax_intercept
def hist_sbr(d, i=0, bins=(0, 30, 1), pdf=True, weights=None, color=None,
- plot_style=None):
+ plot_style=None, ax=None):
"""Histogram of per-burst Signal-to-Background Ratio (SBR).
"""
if i is None:
@@ -1869,13 +1921,14 @@ def hist_sbr(d, i=0, bins=(0, 30, 1), pdf=True, weights=None, color=None,
if 'sbr' not in d:
d.calc_sbr()
sbr = np.concatenate(d.sbr) if i is None else d.sbr[i]
- _hist_burst_taildist(sbr, bins, pdf, weights=weights, color=color,
+ _hist_burst_taildist(sbr, bins, pdf, ax, weights=weights, color=color,
plot_style=plot_style)
- plt.xlabel('SBR')
+ ax.set_xlabel('SBR')
+@_ax_intercept
def hist_burst_phrate(d, i=0, bins=(0, 1000, 20), pdf=True, weights=None,
- color=None, plot_style=None, vline=None):
+ color=None, plot_style=None, vline=None, ax=None):
"""Histogram of max photon rate in each burst.
"""
weights = weights[i] if weights is not None else None
@@ -1886,13 +1939,14 @@ def hist_burst_phrate(d, i=0, bins=(0, 1000, 20), pdf=True, weights=None,
d.calc_max_rate(m=10)
max_rate = np.concatenate(d.max_rate) if i is None else d.max_rate[i]
- _hist_burst_taildist(max_rate * 1e-3, bins, pdf, weights=weights,
+ _hist_burst_taildist(max_rate * 1e-3, bins, pdf, ax, weights=weights,
color=color, plot_style=plot_style, vline=vline)
- plt.xlabel('Peak rate (kcps)')
+ ax.set_xlabel('Peak rate (kcps)')
+@_ax_intercept
def hist_burst_delays(d, i=0, bins=(0, 10, 0.2), pdf=False, weights=None,
- color=None, plot_style=None):
+ color=None, plot_style=None, ax=None):
"""Histogram of waiting times between bursts.
"""
if i is None:
@@ -1902,12 +1956,14 @@ def hist_burst_delays(d, i=0, bins=(0, 10, 0.2), pdf=False, weights=None,
weights = weights[i] if weights is not None else None
bdelays = np.diff(d.mburst[i].start*d.clk_p)
- _hist_burst_taildist(bdelays, bins, pdf, weights=weights, color=color,
+ _hist_burst_taildist(bdelays, bins, pdf, ax, weights=weights, color=color,
plot_style=plot_style)
- plt.xlabel('Delays between bursts (s)')
+ ax.set_xlabel('Delays between bursts (s)')
+
## Burst internal "symmetry"
-def hist_asymmetry(d, i=0, bin_max=2, binwidth=0.1, stat_func=np.median):
+@_ax_intercept
+def hist_asymmetry(d, i=0, bin_max=2, binwidth=0.1, stat_func=np.median, ax=None):
if i is None:
burst_asym = np.concatenate([bext.asymmetry(d, ich=j, func=stat_func) for j in range(d.nch)])
else:
@@ -1922,13 +1978,13 @@ def hist_asymmetry(d, i=0, bin_max=2, binwidth=0.1, stat_func=np.median):
asym_counts_pos = counts[izero:] - counts[:izero][::-1]
asym_counts = np.hstack([asym_counts_neg, asym_counts_pos])
- plt.bar(bins[:-1], width=binwidth, height=counts, fc=blue, alpha=0.5)
- plt.bar(bins[:-1], width=binwidth, height=asym_counts, fc=red,
+ ax.bar(bins[:-1], width=binwidth, height=counts, fc=blue, alpha=0.5)
+ ax.bar(bins[:-1], width=binwidth, height=asym_counts, fc=red,
alpha=0.5)
- plt.grid(True)
- plt.xlabel('Time (ms)')
- plt.ylabel('# Bursts')
- plt.legend(['{func}$(t_D)$ - {func}$(t_A)$'.format(func=stat_func.__name__),
+ ax.grid(True)
+ ax.set_xlabel('Time (ms)')
+ ax.set_ylabel('# Bursts')
+ ax.legend(['{func}$(t_D)$ - {func}$(t_A)$'.format(func=stat_func.__name__),
'positive half - negative half'],
frameon=False, loc='best')
skew_abs = asym_counts_neg.sum()
@@ -1938,8 +1994,46 @@ def hist_asymmetry(d, i=0, bin_max=2, binwidth=0.1, stat_func=np.median):
##
# Scatter plots
#
+def linear_scale(arr):
+ """
+ Returns same array, without rescalling values
+ """
+ return arr
+
+
+def log_scale(arr):
+ """Scale by log of arr"""
+ return np.log(arr)
+
+
+def kde_density(x, y, bw_method=None, rescalex=linear_scale, rescaley=linear_scale):
+ xa = rescalex(x)
+ ya = rescaley(y)
+ mask = ~np.isnan(xa) * ~np.isnan(ya) * (np.inf != x) * (np.inf != y) * (-np.inf != x) * (-np.inf != y)
+ if mask.sum() == 0:
+ raise ValueError("No valid bursts")
+ xy = np.vstack([xa[mask],ya[mask]])
+ colors = gaussian_kde(xy, bw_method=bw_method).evaluate(xy)
+ return x[mask], y[mask], colors
+
+
+@_ax_intercept
+def scatter_burst_data(d, xparam, yparam, i=0, ax=None, color_style='flat',
+ color_style_kwargs=None, xscale='linear', yscale='linear',
+ **kwargs):
+ x = np.concatenate(getattr(d, xparam)) if i is None else getattr(d, xparam)[i]
+ y = np.concatenate(getattr(d, yparam)) if i is None else getattr(d, yparam)[i]
+ if callable(color_style) or color_style in ('kde', ):
+ color_style = kde_density if color_style == 'kde' else color_style
+ color_style_kwargs = dict() if color_style_kwargs is None else color_style_kwargs
+ x, y, c = color_style(x, y, **color_style_kwargs)
+ kwargs['c'] = c
+ ax.scatter(x, y, **kwargs)
+ pass
-def scatter_width_size(d, i=0):
+
+@_ax_intercept
+def scatter_width_size(d, i=0, ax=None):
"""Scatterplot of burst width versus size."""
t_ms = arange(0, 50)
if i is None:
@@ -1953,32 +2047,38 @@ def scatter_width_size(d, i=0):
nt = d.nt[i]
T = d.T[i]
bg_mean = d.bg_mean[Ph_sel('all')][i]*t_ms*1e-3
- plot(b, nt, 'o', mew=0, ms=3, alpha=0.7,
+ ax.plot(b, nt, 'o', mew=0, ms=3, alpha=0.7,
color='blue')
- plot(t_ms, ((d.m)/(T))*t_ms*1e-3, '--', lw=2, color='k',
- label='Slope = m/T = min. rate = %1.0f cps' % (d.m/T))
- plot(t_ms, bg_mean, '--', lw=2, color=red,
- label='Noise rate: BG*t')
- xlabel('Burst width (ms)'); ylabel('Burst size (# ph.)')
- plt.xlim(0, 10); plt.ylim(0, 300)
- legend(frameon=False)
-
-
-def scatter_rate_da(d, i=0):
+ ax.plot(t_ms, ((d.m)/(T))*t_ms*1e-3, '--', lw=2, color='k',
+ label='Slope = m/T = min. rate = %1.0f cps' % (d.m/T))
+ ax.plot(t_ms, bg_mean, '--', lw=2, color=red,
+ label='Noise rate: BG*t')
+ ax.set_label('Burst width (ms)')
+ ax.set_ylabel('Burst size (# ph.)')
+ ax.set_xlim(0, 10)
+ ax.set_ylim(0, 300)
+ ax.legend(frameon=False)
+
+
+@_ax_intercept
+def scatter_rate_da(d, i=0, ax=None):
"""Scatter of nd rate vs na rate (rates for each burst)."""
bw = np.concatenate([burst.width for burst in d.mburst]) if i is None else d.mburst[i].width
nd = np.concatenate(d.nd) if i is None else d.nd[i]
na = np.concatenate(d.na) if i is None else d.na[i]
Rate = lambda nX: nX/bw/d.clk_p*1e-3
- plot(Rate(nd), Rate(na), 'o', mew=0, ms=3, alpha=0.1, color='blue')
- xlabel('D burst rate (kcps)'); ylabel('A burst rate (kcps)')
- plt.xlim(-20, 100); plt.ylim(-20, 100)
- legend(frameon=False)
+ ax.plot(Rate(nd), Rate(na), 'o', mew=0, ms=3, alpha=0.1, color='blue')
+ ax.set_xlabel('D burst rate (kcps)')
+ ax.set_ylabel('A burst rate (kcps)')
+ ax.set_xlim(-20, 100)
+ ax.set_ylim(-20, 100)
+ ax.legend(frameon=False)
+@_ax_intercept
def scatter_fret_size(d, i=0, which='all', gamma=1, add_naa=False,
- plot_style=None):
+ plot_style=None, ax=None):
"""Scatterplot of FRET efficiency versus burst size.
"""
if which == 'all':
@@ -1995,24 +2095,26 @@ def scatter_fret_size(d, i=0, which='all', gamma=1, add_naa=False,
marker='o', markeredgewidth=0, markersize=3)
plot_style_.update(_normalize_kwargs(plot_style, kind='line2d'))
E = np.concatenate(d.E) if i is None else d.E[i]
- plot(E, size, **plot_style_)
- xlabel("FRET Efficiency (E)")
- ylabel("Corrected Burst size (#ph)")
+ ax.plot(E, size, **plot_style_)
+ ax.set_xlabel("FRET Efficiency (E)")
+ ax.set_ylabel("Corrected Burst size (#ph)")
-def scatter_fret_nd_na(d, i=0, gamma=1., **kwargs):
+@_ax_intercept
+def scatter_fret_nd_na(d, i=0, gamma=1., ax=None, **kwargs):
"""Scatterplot of FRET versus gamma-corrected burst size."""
default_kwargs = dict(mew=0, ms=3, alpha=0.3, color=blue)
default_kwargs.update(**kwargs)
E = np.concatenate(d.E) if i is None else d.E[i]
nd = np.concatenate(d.nd) if i is None else d.nd[i]
na = np.concatenate(d.na) if i is None else d.na[i]
- plot(E, gamma*nd+na, 'o', **default_kwargs)
- xlabel("FRET Efficiency (E)")
- ylabel("Burst size (#ph)")
+ ax.plot(E, gamma*nd+na, 'o', **default_kwargs)
+ ax.set_xlabel("FRET Efficiency (E)")
+ ax.set_ylabel("Burst size (#ph)")
-def scatter_fret_width(d, i=0):
+@_ax_intercept
+def scatter_fret_width(d, i=0, ax=None):
"""Scatterplot of FRET versus burst width."""
if i is None:
b = np.concatenate([mburst.width for mburst in d.mburst])*d.clk_p*1e3
@@ -2020,41 +2122,57 @@ def scatter_fret_width(d, i=0):
else:
b = d.mburst[i].width*d.clk_p*1e3
E = d.E[i]
- plot(E, b, 'o', mew=0, ms=3, alpha=0.1,
+ ax.plot(E, b, 'o', mew=0, ms=3, alpha=0.1,
color="blue")
- xlabel("FRET Efficiency (E)")
- ylabel("Burst width (ms)")
+ ax.set_xlabel("FRET Efficiency (E)")
+ ax.set_ylabel("Burst width (ms)")
-def scatter_da(d, i=0, alpha=0.3):
+@_ax_intercept
+def scatter_da(d, i=0, alpha=0.3, ax=None):
"""Scatterplot of donor vs acceptor photons (nd, vs na) in each burst."""
nd = np.concatenate(d.nd) if i is None else d.nd[i]
na = np.concatenate(d.na) if i is None else d.na[i]
- plot(nd, na, 'o', mew=0, ms=3, alpha=alpha, color='blue')
- xlabel('# donor ph.'); ylabel('# acceptor ph.')
- plt.xlim(-5, 200); plt.ylim(-5, 120)
+ ax.plot(nd, na, 'o', mew=0, ms=3, alpha=alpha, color='blue')
+ ax.set_xlabel('# donor ph.'); ax.set_ylabel('# acceptor ph.')
+ ax.set_xlim(-5, 200)
+ ax.set_ylim(-5, 120)
-def scatter_naa_nt(d, i=0, alpha=0.5):
+@_ax_intercept
+def scatter_naa_nt(d, i=0, alpha=0.5, color_style='flat', ax=None, **kwargs):
"""Scatterplot of nt versus naa."""
- nt = np.concatenate(d.nt) if i is None else d.nt[i]
- naa = np.concatenate(d.naa) if i is None else d.naa[i]
- plot(nt, naa, 'o', mew=0, ms=3, alpha=alpha, color='blue')
- plot(arange(200), color='k', lw=2)
- xlabel('Total burst size (nd+na+naa)'); ylabel('Accept em-ex BS (naa)')
- plt.xlim(-5, 200); plt.ylim(-5, 120)
-
-def scatter_alex(d, i=0, **kwargs):
- """Scatterplot of E vs S. Keyword arguments passed to `plot`."""
- plot_style = dict(mew=1, ms=4, mec='black', color='purple',
- alpha=0.1)
- plot_style = _normalize_kwargs(plot_style, 'line2d')
- plot_style.update(_normalize_kwargs(kwargs, 'line2d'))
- E = np.concatenate(d.E) if i is None else d.E[i]
- S = np.concatenate(d.S) if i is None else d.S[i]
- plot(E, S, 'o', **plot_style)
- xlabel("E"); ylabel('S')
- plt.xlim(-0.2, 1.2); plt.ylim(-0.2, 1.2)
+ plot_style = _normalize_kwargs(dict(lw=0, s=17, alpha=alpha), 'scatter')
+ if color_style == 'flat':
+ plot_style['c'] = 'blue'
+ plot_style.update(_normalize_kwargs(kwargs, 'scatter'))
+ scatter_burst_data(d, 'nt', 'naa', i=i, **plot_style)
+ ax.plot(arange(200), color='k', lw=2)
+ ax.set_xlabel('Total burst size (nd+na+naa)')
+ ax.set_ylabel('Accept em-ex BS (naa)')
+ ax.set_xlim(-5, 200)
+ ax.set_ylim(-5, 120)
+
+
+@_ax_intercept
+def scatter_alex(d, i=0, color_style='flat', ax=None, **kwargs):
+ """
+ Scatterplot of E vs S. Keyword arguments passed to `plot`.
+ If `color_style` is 'flat' (default) will use uniform color that can be set
+ with the 'c' keyword argument.
+ If `color_style` is 'kde', then will color based on gaussian_kde density.
+ Control color map with cmap keyword argument
+ """
+ plot_style = dict(s=10, alpha=0.1)
+ if color_style == 'flat':
+ plot_style.update(c= 'purple', ec='black', lw=1)
+ plot_style = _normalize_kwargs(plot_style, 'scatter')
+ plot_style.update(_normalize_kwargs(kwargs, 'scatter'))
+ scatter_burst_data(d, 'E', 'S', i=i, color_style=color_style, **plot_style)
+ ax.set_xlabel("E")
+ ax.set_ylabel('S')
+ ax.set_xlim(-0.2, 1.2)
+ ax.set_ylim(-0.2, 1.2)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -2108,9 +2226,8 @@ def _iter_plot(d, func, kwargs, iter_ch, nrows, ncols, figsize, AX,
titlex, ha = 1 - titlex, 'left'
ax.text(titlex, titley, s, transform=ax.transAxes, ha=ha, va=va,
**title_kws)
- plt.sca(ax)
gui_status['first_plot_in_figure'] = (i == 0)
- func(d, ich, **kwargs)
+ func(d, ich, ax=ax, **kwargs)
if ax.legend_ is not None:
ax.legend_.remove()
[a.set_xlabel('') for a in AX[:-1, :].ravel()]
@@ -2175,8 +2292,8 @@ def dplot_48ch(d, func, sharex=True, sharey=True, layout='horiz',
def dplot_16ch(d, func, sharex=True, sharey=True, ncols=8,
- pgrid=True, figsize=None, AX=None, suptitle=True,
- scale=True, skip_ch=None, top=0.93, bottom=None,
+ grid=True, figsize=None, AX=None, suptitle=True,
+ tile='out', scale=True, skip_ch=None, top=0.93, bottom=None,
hspace=0.15, wspace=None, left=0.08, right=0.96, **kwargs):
"""Plot wrapper for 16-spot measurements. Use `dplot` instead."""
assert (ncols <= 16), '`ncols` needs to be <= 16.'
@@ -2189,11 +2306,11 @@ def dplot_16ch(d, func, sharex=True, sharey=True, ncols=8,
return _iter_plot(d, func, kwargs, iter_ch, nrows, ncols, figsize, AX,
sharex, sharey, suptitle, grid, scale, skip_ch=skip_ch,
top=top, bottom=bottom, hspace=hspace, wspace=wspace,
- left=left, right=right)
+ left=left, right=right, title=tile)
def dplot_8ch(d, func, sharex=True, sharey=True,
- pgrid=True, figsize=(12, 9), nosuptitle=False, AX=None,
+ grid=True, figsize=(12, 9), nosuptitle=False, AX=None,
scale=True, **kwargs):
"""Plot wrapper for 8-spot measurements. Use `dplot` instead."""
global gui_status
@@ -2222,10 +2339,9 @@ def dplot_8ch(d, func, sharex=True, sharey=True,
s += (u', T=%dμs' % (d.T[i]*1e6))
if b is not None: s += (', #bu=%d' % b.num_bursts)
ax.set_title(s, fontsize=12)
- ax.grid(pgrid)
- plt.sca(ax)
+ ax.grid(grid)
gui_status['first_plot_in_figure'] = (i == 0)
- func(d, i, **kwargs)
+ func(d, i, ax=ax, **kwargs)
if i % 2 == 1: ax.yaxis.tick_right()
[a.set_xlabel('') for a in AX[:-1, :].ravel()]
[a.set_ylabel('') for a in AX[:, 1:].ravel()]
@@ -2246,7 +2362,7 @@ def dplot_8ch(d, func, sharex=True, sharey=True,
return AX
-def dplot_1ch(d, func, pgrid=True, ax=None,
+def dplot_1ch(d, func, grid=True, ax=None,
figsize=(9, 4.5), fignum=None, nosuptitle=False, **kwargs):
"""Plot wrapper for single-spot measurements. Use `dplot` instead."""
global gui_status
@@ -2264,10 +2380,9 @@ def dplot_1ch(d, func, pgrid=True, ax=None,
s += (', #bu=%d' % d.num_bursts[0])
if not nosuptitle:
ax.set_title(s, fontsize=12)
- ax.grid(pgrid)
- plt.sca(ax)
+ ax.grid(grid)
gui_status['first_plot_in_figure'] = True
- func(d, **kwargs)
+ func(d, ax=ax, **kwargs)
return ax
@@ -2471,26 +2586,52 @@ def alex_jointplot(d, i=0, gridsize=50, cmap='Spectral_r', kind='hex',
bbox=dict(edgecolor='r', facecolor='none', lw=1.3, alpha=0.5))
return g
+
def _register_colormaps():
+ from sys import version_info
+ if version_info.minor < 10:
+ from importlib_metadata import version
+ else:
+ from importlib.metadata import version
+ new = tuple(int(v) for v in version('matplotlib').split('.'))[:2] > (3, 5)
import matplotlib as mpl
import seaborn as sns
- c = sns.color_palette('nipy_spectral', 64)[2:43]
- cmap = mpl.colors.LinearSegmentedColormap.from_list('alex_lv', c)
- cmap.set_under(alpha=0)
- mpl.cm.register_cmap(name='alex_lv', cmap=cmap)
-
- c = sns.color_palette('YlGnBu', 64)[16:]
- cmap = mpl.colors.LinearSegmentedColormap.from_list('alex', c)
- cmap.set_under(alpha=0)
- mpl.cm.register_cmap(name='alex_light', cmap=cmap)
- mpl.cm.register_cmap(name='YlGnBu_crop', cmap=cmap)
- mpl.cm.register_cmap(name='alex_dark', cmap=mpl.cm.GnBu_r)
-
- # Temporary hack to workaround issue
- # https://github.com/mwaskom/seaborn/issues/855
- mpl.cm.alex_light = mpl.cm.get_cmap('alex_light')
- mpl.cm.alex_dark = mpl.cm.get_cmap('alex_dark')
+ if new:
+ c = sns.color_palette('nipy_spectral', 64)[2:43]
+ cmap = mpl.colors.LinearSegmentedColormap.from_list('alex_lv', c)
+ cmap.set_under(alpha=0)
+ mpl.colormaps.register(name='alex_lv', cmap=cmap)
+
+ c = sns.color_palette('YlGnBu', 64)[16:]
+ cmap = mpl.colors.LinearSegmentedColormap.from_list('alex', c)
+ cmap.set_under(alpha=0)
+ mpl.colormaps.register(name='alex_light', cmap=cmap)
+ mpl.colormaps.register(name='YlGnBu_crop', cmap=cmap)
+ mpl.colormaps.register(name='alex_dark', cmap=mpl.cm.GnBu_r)
+
+ # Temporary hack to workaround issue
+ # https://github.com/mwaskom/seaborn/issues/855
+ mpl.cm.alex_light = mpl.colormaps.get_cmap('alex_light')
+ mpl.cm.alex_dark = mpl.colormaps.get_cmap('alex_dark')
+ else:
+ c = sns.color_palette('nipy_spectral', 64)[2:43]
+ cmap = mpl.colors.LinearSegmentedColormap.from_list('alex_lv', c)
+ cmap.set_under(alpha=0)
+ mpl.cm.register_cmap(name='alex_lv', cmap=cmap)
+
+ c = sns.color_palette('YlGnBu', 64)[16:]
+ cmap = mpl.colors.LinearSegmentedColormap.from_list('alex', c)
+ cmap.set_under(alpha=0)
+ mpl.cm.register_cmap(name='alex_light', cmap=cmap)
+ mpl.cm.register_cmap(name='YlGnBu_crop', cmap=cmap)
+ mpl.cm.register_cmap(name='alex_dark', cmap=mpl.cm.GnBu_r)
+
+ # Temporary hack to workaround issue
+ # https://github.com/mwaskom/seaborn/issues/855
+ mpl.cm.alex_light = mpl.cm.get_cmap('alex_light')
+ mpl.cm.alex_dark = mpl.cm.get_cmap('alex_dark')
+
# Register colormaps on import if not mocking
diff --git a/fretbursts/burstlib.py b/fretbursts/burstlib.py
index 4ad0a3bd..095ee052 100644
--- a/fretbursts/burstlib.py
+++ b/fretbursts/burstlib.py
@@ -789,7 +789,8 @@ def get_ph_mask(self, ich=0, ph_sel=Ph_sel('all')):
ph_sel (Ph_sel object): object defining the photon selection.
See :mod:`fretbursts.ph_sel` for details.
"""
- isinstance(ich, numbers.Integral)
+ if not isinstance(ich, numbers.Integral):
+ raise TypeError(f"channel must be integer value, got {type(ich)}")
if self._is_allph(ph_sel):
# Note that slice(None) is equivalent to [:].
@@ -1273,7 +1274,7 @@ def burst_sizes(self, gamma=1., add_naa=False, beta=1., donor_ref=True):
donor_ref=donor_ref)
bsize_list = [self.burst_sizes_ich(ich, **kwargs) for ich in
range(self.nch)]
- return np.array(bsize_list)
+ return bsize_list
def iter_bursts_ph(self, ich=0):
"""Iterate over (start, stop) indexes to slice photons for each burst.
diff --git a/fretbursts/burstlib_ext.py b/fretbursts/burstlib_ext.py
index bb3c1795..68384380 100644
--- a/fretbursts/burstlib_ext.py
+++ b/fretbursts/burstlib_ext.py
@@ -434,9 +434,9 @@ def burst_photons(dx, skip_ch=None):
else:
stream = dx.A_em[ich].view('int8')
times_arr = np.hstack(
- burstlib.iter_bursts_ph(dx.ph_times_m[ich], dx.mburst[ich]))
+ list(burstlib.iter_bursts_ph(dx.ph_times_m[ich], dx.mburst[ich])))
stream_arr = np.hstack(
- burstlib.iter_bursts_ph(stream, dx.mburst[ich]))
+ list(burstlib.iter_bursts_ph(stream, dx.mburst[ich])))
burst_id, ph_id = [], []
for i, arr in enumerate(burstlib.iter_bursts_ph(stream, dx.mburst[ich])):
@@ -449,7 +449,7 @@ def burst_photons(dx, skip_ch=None):
columns = ['timestamp', 'stream']
if dx.lifetime:
nanot_arr = np.hstack(
- burstlib.iter_bursts_ph(dx.nanotimes[ich], dx.mburst[ich]))
+ list(burstlib.iter_bursts_ph(dx.nanotimes[ich], dx.mburst[ich])))
bph['nanotime'] = nanot_arr
columns = ['timestamp', 'nanotime', 'stream']
burstph = pd.DataFrame(bph, index=[burst_id, ph_id], columns=columns)
@@ -554,22 +554,17 @@ def bursts_fitter(dx, burst_data='E', save_fitter=True,
return fitter
-def _get_bg_distrib_erlang(d, ich=0, m=10, ph_sel=Ph_sel('all'),
+def _get_bg_distrib_erlang(d, ich=None, m=10, ph_sel=Ph_sel('all'),
period=(0, -1)):
"""Return a frozen (scipy) erlang distrib. with rate equal to the bg rate.
"""
+ if ich is None:
+ ich = tuple(range(d.nch))
assert ph_sel in [Ph_sel('all'), Ph_sel(Dex='Dem'), Ph_sel(Dex='Aem')]
# fix negative periods so wrapping occurs coorectly
- parr = np.array(period)
- for i, p in enumerate(parr):
- if p < 0:
- parr[i] = len(d.Lim[ich]) - p + 1
- period = tuple(parr)
# Compute the BG distribution
- bg_ph = d.bg[ph_sel][ich]
-
- rate_ch_kcps = bg_ph[period[0]:period[1]+1].mean()/1e3 # bg rate in kcps
- bg_dist = erlang(a=m, scale=1./rate_ch_kcps)
+ rate_ch_kcps = np.concatenate([d.bg[ph_sel][i][p[0]:p[1]] for i, p in zip(ich, period)]).mean() / 1e3
+ bg_dist = erlang(a=m, scale=1.0/rate_ch_kcps)
return bg_dist
@@ -611,6 +606,25 @@ def histogram_mdelays(d, ich=0, m=10, ph_sel=Ph_sel('all'),
return hist
+def _get_mdelay_channel(d, ph_sel, i, period, bursts):
+ if ph_sel == Ph_sel('all'):
+ ph = d.ph_times_m[i][period]
+ if bursts:
+ phb = ph[d.ph_in_bursts_mask_ich(ich=i)[period]]
+ elif ph_sel == Ph_sel(Dex='Dem'):
+ donor_ph_period = ~d.A_em[i][period]
+ ph = d.ph_times_m[i][period][donor_ph_period]
+ if bursts:
+ phb = ph[d.ph_in_bursts_mask(ich=i)[period][donor_ph_period]]
+ elif ph_sel == Ph_sel(Dex='Aem'):
+ accept_ph_period = d.A_em[i][period]
+ ph = d.ph_times_m[i][period][accept_ph_period]
+ if bursts:
+ phb = ph[d.ph_in_bursts_mask(ich=i)[period][accept_ph_period]]
+ if not bursts:
+ phb = None
+ return ph, phb
+
# TODO: add tests beyond simple smoke tests
def calc_mdelays_hist(d, ich=0, m=10, period=(0, -1), bins_s=(0, 10, 0.02),
ph_sel=Ph_sel('all'), bursts=False, bg_fit=True,
@@ -620,6 +634,7 @@ def calc_mdelays_hist(d, ich=0, m=10, period=(0, -1), bins_s=(0, 10, 0.02),
Arguments:
dx (Data object): contains the burst data to process.
ich (int): the channel number. Default 0.
+ period (tuple): tuple of the range of periods for calculating
m (int): number of photons used to compute each delay.
period (int or 2-element tuple): index of the period to use. If
tuple, the period range between period[0] and period[1]
@@ -639,29 +654,24 @@ def calc_mdelays_hist(d, ich=0, m=10, period=(0, -1), bins_s=(0, 10, 0.02),
bin_x > bg_mean*bg_F. Returned only if `bg_fit` is True.
"""
assert ph_sel in [Ph_sel('all'), Ph_sel(Dex='Dem'), Ph_sel(Dex='Aem')]
- if np.size(period) == 1:
- period = (period, period)
- periods = slice(d.Lim[ich][period[0]][0], d.Lim[ich][period[1]][1] + 1)
+ if ich is None:
+ ich = tuple(range(d.nch))
+ elif np.issubdtype(type(ich), np.integer):
+ ich = (ich, )
+ elif np.size(ich) == 2:
+ ich = tuple(range(ich[0], ich[1]))
+ if np.issubdtype(type(ich), np.integer):
+ period = (ich, ich+1)
+ if np.issubdtype(type(period), np.integer):
+ period = (period, period+1)
+ if np.issubdtype(type(period[0]), np.integer):
+ period = tuple(period for _ in ich)
+ periods = tuple(slice(d.Lim[i][p[0]][0], d.Lim[i][p[1]][1] + 1) for i, p in zip(ich, period))
bins = np.arange(*bins_s)
-
- if ph_sel == Ph_sel('all'):
- ph = d.ph_times_m[ich][periods]
- if bursts:
- phb = ph[d.ph_in_bursts_mask_ich(ich=ich)[periods]]
- elif ph_sel == Ph_sel(Dex='Dem'):
- donor_ph_period = ~d.A_em[ich][periods]
- ph = d.ph_times_m[ich][periods][donor_ph_period]
- if bursts:
- phb = ph[d.ph_in_bursts_mask(ich=ich)[periods][donor_ph_period]]
- elif ph_sel == Ph_sel(Dex='Aem'):
- accept_ph_period = d.A_em[ich][periods]
- ph = d.ph_times_m[ich][periods][accept_ph_period]
- if bursts:
- phb = ph[d.ph_in_bursts_mask(ich=ich)[periods][accept_ph_period]]
-
- ph_mdelays = np.diff(ph[::m])*d.clk_p*1e3 # millisec
+ ph, phb = zip(*(_get_mdelay_channel(d, ph_sel, i, prds, bursts) for i, prds, in zip(ich, periods)))
+ ph_mdelays = np.concatenate([np.diff(ph_[::m])*d.clk_p*1e3 for ph_ in ph]) # millisec
if bursts:
- phb_mdelays = np.diff(phb[::m])*d.clk_p*1e3 # millisec
+ phb_mdelays = np.concatenate([np.diff(phb_[::m])*d.clk_p*1e3 for phb_ in phb]) # millisec
phb_mdelays = phb_mdelays[phb_mdelays < 5]
# Compute the PDF through histograming
@@ -697,7 +707,7 @@ def err_func(p, x, y):
p, flag = leastsq(err_func, x0=[0.9, 3.], args=(_x, _y))
a, rate_kcps = p
- results.extend([a, rate_kcps])
+ results += [a, rate_kcps]
return results
diff --git a/fretbursts/fit/weighted_kde.py b/fretbursts/fit/weighted_kde.py
index 01f1b0b9..982ad359 100644
--- a/fretbursts/fit/weighted_kde.py
+++ b/fretbursts/fit/weighted_kde.py
@@ -72,7 +72,7 @@ def evaluate(self, points):
(d, self.d)
raise ValueError(msg)
- result = zeros((m,), dtype=np.float)
+ result = zeros((m,), dtype=np.float64)
if m >= self.n:
# there are more points than data, so loop over data
diff --git a/fretbursts/loader.py b/fretbursts/loader.py
index e1488e97..bfacfc7e 100644
--- a/fretbursts/loader.py
+++ b/fretbursts/loader.py
@@ -352,33 +352,37 @@ def photon_hdf5(filename, ondisk=False, require_setup=True, validate=False, fix_
return loader_legacy.hdf5(filename)
h5file = tables.open_file(filename)
- # make sure the file is valid
- if validate and version.startswith(u'0.4'):
- phc.v04.hdf5.assert_valid_photon_hdf5(h5file,
- require_setup=require_setup,
+ try:
+ # make sure the file is valid
+ if validate and version.startswith(u'0.4'):
+ phc.v04.hdf5.assert_valid_photon_hdf5(h5file,
+ require_setup=require_setup,
+ strict_description=False)
+ elif validate:
+ phc.hdf5.assert_valid_photon_hdf5(h5file, require_setup=require_setup,
strict_description=False)
- elif validate:
- phc.hdf5.assert_valid_photon_hdf5(h5file, require_setup=require_setup,
- strict_description=False)
- # Create the data container
- h5data = h5file.root
- d = Data(fname=filename, data_file=h5data._v_file)
-
- for grp_name in ['setup', 'sample', 'provenance', 'identity']:
- if grp_name in h5data:
- d.add(**{grp_name:
- phc.hdf5.dict_from_group(h5data._f_get_child(grp_name))})
-
- for field_name in ['description', 'acquisition_duration']:
- if field_name in h5data:
- d.add(**{field_name: h5data._f_get_child(field_name).read()})
-
- if _is_multich(h5data):
- _photon_hdf5_multich(h5data, d, ondisk=ondisk)
- else:
- _photon_hdf5_1ch(h5data, d, ondisk=ondisk)
- if fix_order:
- sort_photon_times(d)
+ # Create the data container
+ h5data = h5file.root
+ d = Data(fname=filename, data_file=h5data._v_file)
+
+ for grp_name in ['setup', 'sample', 'provenance', 'identity']:
+ if grp_name in h5data:
+ d.add(**{grp_name:
+ phc.hdf5.dict_from_group(h5data._f_get_child(grp_name))})
+
+ for field_name in ['description', 'acquisition_duration']:
+ if field_name in h5data:
+ d.add(**{field_name: h5data._f_get_child(field_name).read()})
+
+ if _is_multich(h5data):
+ _photon_hdf5_multich(h5data, d, ondisk=ondisk)
+ else:
+ _photon_hdf5_1ch(h5data, d, ondisk=ondisk)
+ if fix_order:
+ sort_photon_times(d)
+ finally:
+ if not ondisk:
+ h5file.close()
return d
diff --git a/fretbursts/mfit.py b/fretbursts/mfit.py
index 9f330e99..5a6ba13d 100644
--- a/fretbursts/mfit.py
+++ b/fretbursts/mfit.py
@@ -322,7 +322,7 @@ def _set_hist_data(self, hist_counts, bins):
self.hist_binwidth = (bins[1] - bins[0])
self.hist_axis = bins[:-1] + 0.5*self.hist_binwidth
self.hist_counts = np.array(hist_counts)
- self.hist_pdf = np.array(hist_counts, dtype=np.float)
+ self.hist_pdf = np.array(hist_counts, dtype=np.float64)
self.hist_pdf /= self.hist_counts.sum(axis=1)[:, np.newaxis]
self.hist_pdf /= self.hist_binwidth
self._hist_computed = True
diff --git a/fretbursts/phtools/burstsearch.py b/fretbursts/phtools/burstsearch.py
index d1e30a51..8ac3c5cf 100644
--- a/fretbursts/phtools/burstsearch.py
+++ b/fretbursts/phtools/burstsearch.py
@@ -191,20 +191,15 @@ def mch_count_ph_in_bursts_py(Mburst, Mask):
#
try:
- from burstsearch_c import bsearch_c
+ from fretbursts.burstsearch_c import bsearch_c, mch_count_ph_in_bursts_c
bsearch = bsearch_c
+ mch_count_ph_in_bursts = mch_count_ph_in_bursts_c
print(" - Optimized (cython) burst search loaded.")
except ImportError:
bsearch = bsearch_py
+ mch_count_ph_in_bursts = mch_count_ph_in_bursts_py
print(" - Fallback to pure python burst search.")
-try:
- from burstsearch_c import mch_count_ph_in_bursts_c
- mch_count_ph_in_bursts = mch_count_ph_in_bursts_c
- print(" - Optimized (cython) photon counting loaded.")
-except ImportError:
- mch_count_ph_in_bursts = mch_count_ph_in_bursts_py
- print(" - Fallback to pure python photon counting.")
class Burst(namedtuple('Burst', ['istart', 'istop', 'start', 'stop'])):
diff --git a/fretbursts/phtools/phrates.py b/fretbursts/phtools/phrates.py
index e0e27795..abb943c2 100644
--- a/fretbursts/phtools/phrates.py
+++ b/fretbursts/phtools/phrates.py
@@ -31,7 +31,7 @@
import numpy as np
try:
- import phrates_c as cy
+ import fretbursts.phrates_c as cy
except ImportError:
has_cython = False
else:
diff --git a/fretbursts/phtools/setup.py b/fretbursts/phtools/setup.py
deleted file mode 100644
index 136488a0..00000000
--- a/fretbursts/phtools/setup.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from distutils.core import setup
-from distutils.extension import Extension
-from Cython.Distutils import build_ext
-import numpy as NP
-
-ext_modules = [Extension("burstsearch_c", ["burstsearch_c.pyx"])]
-
-setup(
- name = 'Burst search',
- cmdclass = {'build_ext': build_ext},
- include_dirs = [NP.get_include()],
- ext_modules = ext_modules
-)
diff --git a/fretbursts/tests/__init__.py b/fretbursts/tests/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/fretbursts/utils/misc.py b/fretbursts/utils/misc.py
index 9fbd51af..3ad001f1 100644
--- a/fretbursts/utils/misc.py
+++ b/fretbursts/utils/misc.py
@@ -64,7 +64,7 @@ def bincenters(self):
@property
def pdf(self):
if not hasattr(self, '_pdf'):
- self._pdf = np.array(self.counts, dtype=np.float)
+ self._pdf = np.array(self.counts, dtype=np.float64)
self._pdf /= (self.counts.sum() * self.binwidth)
return self._pdf
diff --git a/notebooks/Example - 2CDE Method.ipynb b/notebooks/Example - 2CDE Method.ipynb
index ad797ff3..0ef5ed91 100644
--- a/notebooks/Example - 2CDE Method.ipynb
+++ b/notebooks/Example - 2CDE Method.ipynb
@@ -16,9 +16,36 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " - Optimized (cython) burst search loaded.\n",
+ "--------------------------------------------------------------\n",
+ " You are running FRETBursts (version 0.7.post130+g3f024bb.d20240529).\n",
+ "\n",
+ " If you use this software please cite the following paper:\n",
+ "\n",
+ " FRETBursts: An Open Source Toolkit for Analysis of Freely-Diffusing Single-Molecule FRET\n",
+ " Ingargiola et al. (2016). http://dx.doi.org/10.1371/journal.pone.0160716 \n",
+ "\n",
+ "--------------------------------------------------------------\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "'0.13.2'"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"from fretbursts import *\n",
"from fretbursts.phtools import phrates\n",
@@ -28,7 +55,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
@@ -48,9 +75,50 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "URL: http://files.figshare.com/2182601/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5\n",
+ "File: 0023uLRpitc_NTP_20dT_0.5GndCl.hdf5\n",
+ " \n",
+ "File already on disk: /home/paul/Python/FRETBursts/notebooks/data/0023uLRpitc_NTP_20dT_0.5GndCl.hdf5 \n",
+ "Delete it to re-download.\n",
+ "# Total photons (after ALEX selection): 2,259,522\n",
+ "# D photons in D+A excitation periods: 721,537\n",
+ "# A photons in D+A excitation periods: 1,537,985\n",
+ "# D+A photons in D excitation period: 1,434,842\n",
+ "# D+A photons in A excitation period: 824,680\n",
+ "\n",
+ " - Calculating BG rates ... Channel 0\n",
+ "[DONE]\n",
+ " - Performing burst search (verbose=False) ...[DONE]\n",
+ " - Calculating burst periods ...[DONE]\n",
+ " - Counting D and A ph and calculating FRET ... \n",
+ " - Applying background correction.\n",
+ " [DONE Counting D/A]\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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2uX4AfF5dVp1kX+TtiYlcj3DMBQ64A5lnjyg/JwsR33WrFm68847+eEuAAAAAKBKcdnSLv7+/pL+vDP9Qhs3bpTVapUk9e7du9DzPTzO3cFns9kqKKGz+vXra+jQoXrppZe0aNEiPfrooxc91+TJkx1NdG9vb82bN09RUVGaOXOm5s+fr6NHjzrWgZekF154QatWrSpqOknnloi5sIk+ceJEHTlyRPPnz9esWbO0a9cuzZ07V97e3pKkpUuX6tVXX73o9wAAKB273a5p06Y51SweXqrf+zaTEpnHw6+OGvRxXuLlzJkzevvtt80JBAAAAADARXJZI7158+ay2+2Oh45e6KeffnJs9+nTp9Dzzzfga9euXTEB/9/gwYN19OhRxcXF6aefftLzzz+v66+/3mnN9rJISEjQ9OnTHftvv/22RowY4TTG09NTb775poYPH+6olbS8yzPPPOPYHjFihN544w15eno6jbnjjjv01ltvOfanTZtW6A8yAADlZ8mSJdq1a5dTLaTbEHn4B5gTyGR12naTf1Pn56P88MMP2rRpk0mJAAAAAAAoO5c10nv27ClJOnnypObMmeOox8fHa9asWZIkPz8/x7i/2rVrlwzDULNmzSo0Z4MGDdSkSZNym2/WrFnKyMiQJLVq1Urjxo0rcuybb74pi+XcR7JhwwZt37690HF//PGH4wcSbm5uevPNN4uc85///Kcuv/xySeeW1/nyyy8v6n0AAEqWnZ2t//73v041zzohCurUz5xAlYBhGGo44E5ZPJyXbXvllVeUlZVVxFkAAAAAAFQuLmukjxo1yrF97733auTIkXr88cfVrVs3JScnyzAMDR8+vND10ePi4nTo0CFJUvv27V0VuVx8//33ju3Ro0cXukb8eU2aNNHAgQMd+999912Jcw4cOFBhYWFFzmkYhkaPHl3inACASzdnzhzFx8c71Rr0uU0Wt5r9fAqP2kGq3+sWp9qpU6f00UcfmZQIAAAAAICycVkjvWvXrho7dqzsdrvy8/P11Vdf6e2339bx48clnVuy5bnnniv03O+++052u12SirxjvTLKzs7Wxo0bHfv9+vUr8ZwLxyxfvrzQMStWrLjoOdevX6+cnJwSzwEAlE1CQoJmzpzpVPOu31T+zavWD4ArSuCVveQd4vyD33nz5ik6OtqkRAAAAAAAlJ7LGumS9MEH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tWo51axWq2JjY7VhwwYlJSVJklauXKm+fftq69atqlOnToVmQsVJTEx0WRNdku6//36lp6df1LlTp07VxIkTHftubm6KiIhw/HDj8OHD+uOPP5Sfny+r1arnn39eKSkpmjZtWpFzrlmzRoMHD1Z2drajdsUVV6h169aqU6eOYmJitGXLFqWlpUmSFixYoGPHjmn16tXy8PC4qPcBAABQ1dBIBwAAQKVx/o70Vq1aKTg42OnYunXrHNt/bbKXt5deeknNmjUr9Fhubq7eeustPfXUU7Lb7Tp06JAmT55cbKMSVUNYWJjCw8Mdr48++kgLFy4s12vMmTNHv/76qyTpzjvv1Ny5c0t97sGDB53uZB84cKA++OADtWrVymncnj17dP/992v16tWSpOnTp+uOO+5Qly5dCsyZn5+ve++919FEb9asmT799FMNGjTIaVxSUpImTZqkjz76SNK5H3q99957+ve//13q/AAA1CQWiyGLpWxLt5V7Bru5169uWCkHAAAAlUJubq62b98uqfBG+fr16yVJvr6+6tChg0uzXcjDw0MTJ07UAw884KiVpRmKyueee+5RXFycjh07pv/973966qmnNHDgQPn5+ZXrdU6fPu1oPPfq1Utjxowp0/lfffWV4875hg0b6scffyzQRJektm3b6pdfflFoaKgkyW63F/nf6Nq1a3Xw4EHH/nfffVegiS5JwcHB+vDDDzV06FBHbc6cOWXKDwAAUJXRSAcAAEClsH37dsddsYU10s/fkR4RESF3d/O/WDlixAjHdmxsrFJSUkxMg0vRtGlT1a9fv8Kv8+ijjyoxMVEeHh76+OOPy/yA0cjISMf23/72N/n6+hY51t/fXzfddJNjf//+/SXO2bZtW3Xq1KnYDHfddVeJcwIAAFRHNNIBAABQKVz4oNG/NtLj4uJ05MgRSeY8aLQwDRo0cNov7MGPkjR69GgZhiHDMDRz5swS5505c6Zj/OjRo0s9Jj8/X19//bX+9re/qUWLFvLx8ZFhGPr++++dzs3NzdWcOXN06623qkWLFvL395eXl5caNmyoDh06aMiQIfrPf/6jXbt2FXrN82txS+cemnk+x19fhfnjjz/00EMPqXPnzgoMDJSHh4eCgoLUqlUr9erVS+PHj9eSJUuUlZVV4r+nqmbRokWaN2+eJOnJJ59Uu3btyjzHheuqBwQE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f3/NnDlTX3zxhePYa6+95vQ+XKm0y4Vcc801+ve//+3Y3759ux577DG1bdtWISEhuvnmm/X22287HkhaXjw8PDRnzhzVrl1bkpScnKy33npLAwYMUEBAgHr06KEnn3xSq1evdizhU9W9++672rRpk6RzD+8saj36snrzzTc1b948SdKgQYO0YMECNWjQoMC4yy67TEuWLFHbtm0lSSdOnNBzzz1X6Jzr16/XI488IrvdrgYNGmjZsmXq1KlTgXEBAQH68MMPHWuj5+bm6p///Ge1+cwAAABKwhrpAAAAcIlNmzbpyy+/LFA/f8e5JM2YMcNpTHx8vPLz8yVJUVFReuihh5zOveGGG0xbr3n06NH69NNPtX79eknStGnTCr2jvqKVtDb6haZPn67+/fvr9ddfd+SWpMTERP3www/64YcfNH78eN1yyy2aPn26407yS9WrVy9FRkZq8uTJmj9/vjIyMiSdexjnxo0btXHjRr355ptq1aqVXn/9dd1yyy3lcl0znDx5UpMmTZIktW7dWk8//XS5zJudna033njDsT958uRiv4ng5+enSZMm6a677pIkffnll3r33XcLLJ00efJk2Ww2SdKjjz6qevXqFZvj1Vdf1Zdffim73a7o6Ght3rzZ6eHAAADgHIvFkMXNMDeDzdzrVzc00gEAAOASe/bs0fvvv1/smI8//rjIYytWrNCKFSucanXr1jX1wYfXXXedoyG9cuVK5efny83N7ZLmPN/UrCg33nijbrzxRp08eVIrV67UmjVrtGbNGkVHR0s6twb3t99+q1WrVmn9+vVq1apVuVy3WbNm+vzzz/Xee+9p/fr1Wr16tdasWaONGzc6lnjZv3+/br31Vv3nP//R+PHjy+W6rnbgwAHHDwoyMjLUp0+fIsde+CBWSerevbtje8yYMRozZoxjf9OmTTp79qwkydfXVxERESVmGTBggGM7PT1d+/bt0xVXXOGoWa1Wp/+n+vfvX+KcjRo1UqtWrbRv3z5J0pYtW2ikAwCAGoFGOgAAAHCRQkNDHdsZGRlKSkoqcEevh4eHYzsvL6/EOVNSUsovYDEaNWqku+66y3HH8okTJzRz5ky9/vrrjvcyfvz4cn+opI+PjwYOHKiBAwdKkrKysrR48WK9/PLLioyMlHRuOZThw4erUaNG5XptVztx4oROnDhR6vHnl4ORpMGDBzsdO3nypGM7MDCwVOviBwcHO+3/9b+txMRE5eTkFDm+NPO66r9XAAAAs7FGOgAAAFxi9OjRBR7gOWfOHMfxNWvWOB3LzMyUp6enJDnWYv7r68UXXzTp3ZyTmZnptF9Yc7NWrVqO7eIe+HheVFTUpQe7CI0bN9akSZP06aefOmpLly51arRKkmGU71eEfXx8dOutt2rFihWO9b6tVquWLFlSrtep6i5cwufMmTOlWpv8r/+9BQQEFDmndG79+tK4cN6/zgkAAM6xWCQ3k1+l+Lk7yoB/nQAAADDN6tWrJUleXl4KDw93OrZp0yZZrVZJUu/evV2erTS2bdvm2Pb29i70jt7mzZs7ts8/OLUo2dnZ+umnn8ot38UYOnSoYzs3N7dAc9Xb29vpeHkJDAxUz549Hfvx8fHlNrcr9evXr9Af+hT2+utSRcX9kKhJkyaO7czMTKe714uyfPlyx7aHh4fTHNK5JviFP+i5cHxRTpw4of379zv2W7ZsWeI5AAAA1QGNdAAAAJjmfCM9IiJCXl5eTsfWrFnj2C5unWmzHD9+XAsXLnTs9+/fv9C7tS9cy/rnn39WYmJikXM+//zzxR6/FKWd99ixY45ti8WioKAgp+MBAQGOO+8TEhJKbKaX5i78wq4dEhJS6vNqgquuusrpBzXPP/98sevpZ2RkaMqUKY79q6++Wv7+/k5jDMNwLLEjSe+8845Onz5dbI5nnnnGcTe8r6+vevXqVab3AQAAUFXRSAcAAIApEhMTtXfvXkmF33F+vpHerFkzhYWFuTRbSbZu3arrrrvOaWmXoh6OGRERocsuu0zSuQc+3nHHHTpz5ozTmMzMTE2cOFFTp04t8AOF8tKjRw/dcccdWrRokeNO/7/as2ePRo4c6dgfOHBggTxeXl6OB5Dm5eXpu+++K/a6//3vf9WpUyd98MEHio2NLXRMWlqannzySW3ZskWS5Obm9n/s3Xd8FHX+P/DXzJbsZtN7QhpJCAFCJ2AFBAUBG1iRYkG9O/TaT8/T87w79c4reuf5Pe9OxYaABaUjIipVFAgdUiAhvddN215+f+RYEtJ2N5tMEl7Px2Mfj92Z+cy8d3azm33NZz6DuXPndrqsIAiO2wcffNDttocSURTx85//3PH466+/xj333NNpz/3c3FzMnTsXWVlZjmlPP/10p+tt+76tqKjArFmzOj1zQqvV4sc//jHWrFnjmPbEE0/A29vbnadDRERENOjwYqNEREREJImLvdGBjkG61WrFDz/80Om8/vD73/++3ZAXAGCz2dDQ0IBTp04hIyOj3bxf/OIXuPHGGztdlyAI+POf/4x77rkHAPDNN99g+PDhmD17NkJCQlBRUYH9+/dDq9UiKioKjz/+OJ577jmPPyez2YxPPvkEn3zyCdRqNcaNG4eEhAT4+fmhvr4eFy5cwLFjxxzLq9VqvPrqq52u684778Sf/vQnAMDSpUuxevVqJCUltbuwatu2p06dwuOPP44nnngCiYmJSE1NRUhICMxmM8rKyvD999+jpaXFsfwzzzzT7wdPJkyY0GFa2x7yW7du7XSZnobr8aRf/epX2LVrF7777jsAwIYNG7B9+3Zce+21GD58OGw2G86dO4fDhw/DarU62q1cuRLz5s3rdJ3XX389nnzySfz9738HAJw9exYTJ07EpEmTMHbsWCiVShQXF+PAgQPtXqO0tDT8/ve/78NnS0RENLiJMgGizLPXlnG5Bpu02x9qGKQTERERkSQuBumiKLYbGxsATpw4gebmZgDSDOvy4YcfOrWct7c3XnrpJfzyl7/sdrm7774bL7zwgiN4bGhowMaNG9stM3LkSGzYsAHp6enuFd2DtgcG9Ho9Dh8+3OU428OHD8fatWsxbty4Tuc//fTT2LRpEzIzM2E2m7Fjx44Oy1wM0ttu1263Izc3F7m5uZ2uV6lU4rnnnsPvfvc7p5+Xp5w6darb+fX19R3OJOhvKpUKX3zxBX7605863qNGo7HLsc0VCgWef/75Hg/MvPLKKwgPD8fzzz/vuLjs8ePH210DoK177rkHb731FnujExER0RWFQToRERERSeLi0C3jx4+Hn59fp/OAgTU+uo+PD0JCQjBu3DjMmjULS5cu7fQCo5353e9+h5tuugn/+te/cODAAVRVVcHPzw9JSUm47777sGLFCvj4+PRZkH7y5EkcOnQIe/bswZEjR3Du3DmUlZVBp9PB29sbERERmDBhAm677Tbcc8893Q4x4+fnhyNHjuC///0vtm3bhqysLGi12k7HS3/yySdx55134uuvv8b333+PM2fOoKCgAI2NjRBFEQEBARg1ahRmzZqF5cuXIy4urk+e/1Dh5+eH1atX4+mnn8bq1atx8OBB5ObmQqvVQhRFBAYGYvTo0Zg5cyYefvhhREVF9bhOQRDwq1/9CsuXL8fq1auxZ88enDlzBnV1dbBYLPD390dCQgKuueYaPPDAA532zCciIiIa6gT7xSvFELmppKTEceptcXExoqOjJa6IiIiIiIiGusH8O6Rt7WPGjMHKlSuxcuVKiasiT9Lr9di1axcAYM6cOVCr1RJXRO4azJ811P/avl82jZyFMIW0f/tVZj0Wnms9c43v397jxUaJiIiIiIiIiIiIiLrBIJ2IiIiIiIiIiIiIqBscI52IiIiIiIiIiIjIg0RBgCgKktdAnsMe6URERERERERERERE3WCQTkRERERERERERETUDQ7tQkRERERERERERORBggwQZdLXQJ7DHulERERERERERERERN1gkE5ERERERERERERE1A0O7UJERERERERERETkQaIoQBQFyWsgz2GPdCIiIiIiIiIiIiKibjBIJyIiIiIiIiIiIiLqBod2ISIiIiIiIiIiIvIgUdZ6k7oG8hz2SCciIiIiIiIiIiIi6gaDdCIiIiIiIiIiIiKibnBoFyIiIiIiIiIiIiIPkgkCZKIgeQ3kOeyRTkRERERERERERETUDQbpRERERERERERERETd4NAuRERERERERERERB4kiIAocRdmgV2oPYq7k4iIiIiIiIiIiIioGwzSiYiIiIiIiIiIiIi6waFdiIiIiIiIiIiIiDxIlAkQZYLkNZDnsEc6EREREREREREREVE3GKQTEREREREREREREXWDQToRERERERERERERUTc4RjoRERERERERERGRB4li603qGshzGKQTERERERERERERkVusVisyMjKQnp6Oo0ePIj09HadPn4bZbAYAzJgxA3v37nV7/cXFxVi/fj22bduG/Px8VFZWwsfHBxEREUhOTsbMmTNx0003YdSoUR56Rp1jkE5ERERERERERERELtu8eTOWLFkCnU7n8XWbTCb87W9/w5/+9CcYDIZ284xGI2pra5GRkYFNmzZhzJgxOHv2rMdraItBOhEREREREREREZEHCYIdgmiXvIa+ptVq+yRENxqNWLRoEXbs2OGYFhgYiGuuuQYRERGw2WwoLi7G8ePHUVdX5/Htd4ZBOhERERERERERERG5LTw8HGlpaY7bV199hddff93t9S1ZssQRooeHh+PVV1/F4sWLIZPJ2i1ntVqxb98+HDt2rFf1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aGATxNab1DWQ53B3EhERERERERERERF1g0E6EREREREREREREVE3OLQLERERERERkYQ4tAsR0dAjwA5BkPbzXQC/XzyJPdKJiIiIiIiIiIiIiLrBIJ2IiIiIiIiIiIiIqBsc2oWIiIiIiIhIQhzahYho6BHE1pvUNZDncHcSEREREREREREREXWDQToRERERERERERERUTcYpBMRERERERFJiEO7EBERDXwcI52IiIiIiIhIQjabTeoSiIjIwwTRDkGU9kCp1NsfatgjnYiIiIiIiEhCDNKJiIgGPgbpRERERERERBKyWq1Sl0BEREQ94NAuRERERERERBJij3QioqFHEAFR4i7MArtQexR3JxEREREREZGE2COdiIho4GOQTkRERERERCQhBulEREQDH4d2ISIiIiIiIpIQh3YhIhp6BNEOQbRLXgN5DnukExEREREREUmIPdKJiIgGPgbpRERERERERBJikE5ERDTwcWgXIiIiIiIiIglxaBcioqFHEABB4i7MgiDt9oca9kgnIiIiIiIikhB7pBMREQ18DNKJiIiIiIiIJMQe6URERAMfh3YhIiIiIiIikpDZbJa6BCIi8jBBsEMQ7JLXQJ7DHulEREREREREEjKZTFKXQERERD1gkE5EREREREQkIaPRKHUJRERE1AMO7UJEREREREQkIfZIJyIaekSx9SZ1DeQ53J1EREREREREEmKPdCIiooGPQToRERERERGRhBikExERDXwc2oWIiIiIiIhIQhzahYho6BFEOwTRLnkN5DnskU5EREREREQkIQbpREREAx+DdCIiIiIiIiIJGQwGqUsgIiKiHnBoFyIiIiIiIiIJ2Ww2mM1mKBQKqUshIiIPEcTWm9Q1kOdwdxIRERERERFJTKfTSV0CERERdYNBOhEREREREZFE9Ho97HY7mpubpS6FiIiIusGhXYiIiIiIiIgkUlzbCKVSiZaWFqlLISIiom4wSCciIiIiIiKSiChvHRedPdKJiIYYUQBkgvQ1kMdwaBciIiIiIiIiiTFIJyIiGtgYpBMRERERERFJjEE6ERHRwMahXYiIiIiIiIgkxjHSiYiGFkEUIEg8tIrU2x9q2COdiIiIiIiISGLskU5ERDSwMUgnIiIiIiIikhiDdCIiooGNQ7sQERERERERSUyr1UpdAhEReZJMbL1JXQN5DPcmERER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Z7lHQohT6cCeDh59eAstTb5xj59zYTm337saj9eatH135zC//9VWtm9qHvd4WaWHr31rHfOrc2a6yxO8tbWFh1/eT9/gidnoep3CjRdWcveVVVgznBW7c2sLv//lVjrbh5I+L8tt4atfW8n6iytRlBMnD9paBnjsF1vYu7M9aXu9XuWqryziK7cuxTRmNvqIP8xzj+/inVcPTRliVi7w4usP0NczcvwxRVW4+Ir5///27js+qir///h7Jp0kQBJAggFCC71LKCItFMUGqCjCAmtZV9397uradl0LurvuKrJN175gR0SxgtJBDb0GCJ1AIAlptPQy9/cHP2YzkEySyUzuZHg9H495PO6de849n+RMJjOfOfO5unVqX4U1DnLa//ix0/rwrU3ak5ThcH+X7ldo2r0D1Do2wmn//Lxiffbhdq36/oDD6tmINo3U5IamOljqPJlttVgUZ0QobWGWCk7971sNAYFWte/UTIf2Z6us1PmHEq07Rik91F/HLvpWQv9mocrfn6Ozp51/KBHZrJGaRoTo8IEch/tbxTSRxSqdOHbGaf+gYH/ddFtPXXtTV/lXWE2eW1Cs1xMPaElympzNokXSuC7Run9InKJCnc9Xbf14JFP/WrtPaWedfygRERKotpZA7dvt+DtoHR6kVgVlSr3od3OxgACrrr25m268raeCglz7u9u87pg+/u9mZWfl2++zWi0aMbaTbpnaR2Hhzn83h3PO6e9r9mrbCcfHXL+YCP12WBe1j6r9B2z1bdf2NH3w9ialHz/rcP+Q4e10+8z+ahoRYlJkgGc15PchFWPv/eTHCmzqmdc/2Zu+18nEL2UrKVRsZKhCQ0MVHBys//znP9RE97DCwkItXbpUkjR27FiFhPBc3FA15Oca1L+Kj5ePN85R81a1W9zhbllpuZoS/7AkHr/uQCIddcY/FeDykJOVr/nztmjjT0erbFNVYlA6v2L0289369tFu1VaUvmKY4tFGjKivSZP7+eRxM/BE2f0yudJ2n2k6iRtZOMg3XtDN42+yrXnstLScn33xR59tTBJJcWOP6efv1Vjru+iCbf3VEijwCrPsXn9/08MZuZfcqx3/yt1591XqWWrxlX2P370lN5/a5P27jp5ybFmLUIVFh6klEO5VfYPDQ/ULXf20chxcZd8S6Agv0SL5u/QisVVJ+utVosSrovTxCl9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6aefNshrMpJId0FUVJR9++TJkzXqk5GRYd+OjIx0e0xHjhzRmDFj7BdC7datm5YsWUJdPQAAAADwYkVZxxz2u3XrJj8/P5OiAQC4i80LSrvY6nH8Jk2a6KOPPtIvf/lLvffee/rxxx914sQJlZeX64orrtCgQYM0efJkTZgwocGtRL+ARLoLOnfubN8+evRojfocO/a/F0ddunRxazwnTpxQQkKC0tLSJJ2vTbRs2TKHhD8AAA2RYRj6YeUhrVl2UDdP7qle/a40O6TL2l2/GqyP527RqZyCWvXz87MoYXxnde/d0kORAUDDde5IkmylJZJCJUm9evUyNyAAAOpg2LBhGjZsmNlheASJdBd07drVvp2UlKSysjL5+zv/VW7durXS/nWVmZmphIQEHTly/irvMTExWr58uVq1auW2MQAAMMORgzl6/82NOrQ/W5L08nMr1Tc+RlPvvkrNrwg3ObrL08Chsepz1ZX68tMkff9lssrKbNX26dazpabeO0AxbZp6PkAAaIAK04/oyshw+4VGe/bsaXJEAACgMiTSXTBkyBAFBQWpuLhY+fn52rx5swYNGlRl++LiYq1fv96+P2rUKLfEkZOTo9GjR2vfvn2SpBYtWmj58uWKjY11y/kBADDDubNF+vT9bVq74pCMi76LuG3jce3anq7xE7rphlt6KDCIlzL1LSg4QJN/1k/DEjrqo3c2a8eWE5W2i2zWSFN+fpXir25bzxECQMNiDQhUcHCw/WvucXFxJkcEAAAqw7tPF4SFhSkhIUGLFy+WJM2bN89pIv3zzz/XuXPnJEkRERFu+XrD2bNnde211yopKcl+3mXLljmUnQEAoCGxldu04rv9WvTxDuXnlVTZrrSkXF8uSNJPqw7rjp/314AhJGrN0LJVYz381Cht25iqD9/ZrKyTeZKkgACrrp3QTTfe2lNBfNABALXSqFEjtWxJGSwA8AU2o35rlFcVA9yHdzcueuCBB+yJ9Llz5+rXv/51pVdWLygo0NNPP23fv++++6otA1OdgoICXX/99dq8ebMkKTw8XN999x219AAADdaBvZl69/WNSk05VeM+2Vn5euXFtereu6Wm/2KgWl7Z2IMRoip941urR99WWrxot44eztXtM/rrimhK7wCAK9q1a9dgL8AGAICvs5odQEN1/fXX65prrpEklZSU6IYbbrCvDr8gJydHEyZM0MGDByVJkZGRevzxxys9X0pKiiwWi/22evXqStsVFxdrwoQJ+vHHHyVJISEh+uabbxQfH++mnwwAgPr35YKkWiXRK9q9I0Mrv9/v5ohQGwEBfrp5ci/93xMjSKIDQB106NDB7BAAAEAVWJFeBx999JHi4+OVnp6ulJQU9enTR8OHD1f79u2VlZWl5cuXq6CgQJLk7++vBQsWqGnTpnUa86mnntKyZcvs+127dtWCBQu0YMGCavt26tRJv/nNb+o0PgAAAADAM7jeFQD4jnLj/M3sGOA+JNLrICYmRitXrtSUKVO0fft22Ww2rVq1SqtWrXJo17x5c82dO1cJCQl1HjMzM9Nhf+vWrdq6dWuN+g4fPpxEOgAAAAB4qVatWpkdAgAAqAKJ9Drq0qWLNmzYoPnz5+vjjz/W7t27dfLkSTVt2lTt27fXxIkTddddd6lZs2ZmhwoAAAAA8GLR0dFmhwAAAKpAIt0NAgMDNX36dE2fPt3lc8TGxsowqv++xbx58zRv3jyXxwEAAAAAeCcS6QDgO2xeUNrFRmkXt+JiowAAAAAAmCwwMLDO19QCAACeQyIdAAAAAACTtWzZUlYrb9EBAPBWlHYBAAAAAMBkUVFRZocAAHAjm2F+aRWzx/c1fNwNAAAAAIDJKOsCAIB3I5EOAABMF9sh0uW+fv5WtYmNcGM0AADUv4gI/pcBAODNKO0CAABMd+vUvurV90q9/9ZGHTtyqsb9evSJ1rR7Byj6yiYejA4AAM9jRToA+JZySeUml1YpN3d4n0MiHQAAeIW4bi00a/Z4rfr+gD77eLvyz5VU2bZZi1DdeddV6j+oTT1GCACA55BIBwDAu5FIBwAAXsPqZ1XC+M4aODRWCz/cptXLDsqocIWcwEA/jZ/UXddP6qHAQD8TIwUAwD1sZaWSSKQDAODtSKQDAACvE9Y4SDPvH6QRYzvp/Tc36eC+LPUf1FpTfn6Vml8RZnZ4AAC4TeuoxmrUqBGJdADwMeWGF5R2MXl8X0MiHQAAeK3YDlH641/H6cSx04ppy0XYAAC+JyQkRBaLRWFhfFAMAIA3s5odAAAAgDMWi4UkOgDA5zVq1MjsEAAAgBOsSAcAAAAAwGQk0gHAt9gMi8oNi+kxwH1YkQ4AAAAAgMlCQkLMDgEAADhBIh0AAAAAAJOxIh0AAO9GaRcAAAAAAExktVoVGBhodhgAADeyGedvZscA92FFOgAAAAAAJgoJCZHFQh1bAAC8GYl0AAAAAABMRFkXAAC8H6VdAAAAAAAwUVBQkNkhAADcrNw4fzM7BrgPK9IBAAAAADBRQECA2SEAAIBqkEgHAAAAAMBEJNIBAPB+JNIBAAAAADCRvz9VVwEA8Hb8twYAAAAAwEQk0gHA99i8oEa6jRrpbsWKdAAAAAAATERpFwAAvB+JdAAAAAAATMSKdAAAvB//rQEAAAAAMBEr0gHA99hs529mxwD3YUU6AAAAAAAmIpEOAID3I5EOAAAAAICJKO0CAID34781AAAAAAAmYkU6APiecuP8zewY4D6sSAcAAAAAwERWK2/NAQDwdvy3BgAAAADARBaLxewQAABANSjtAgAAAAAAAABuZJP5pVVs5g7vc1iRDgAAAAAAAACAEyTSAQAAAAAAAABwgtIuAAAAAAAAAOBGNuP8zewY4D6sSAcAAAAAAAAAwAkS6QAAAAAAmMhisZgdAgAAqAalXQAAAAAAAADAjcqN8zezY4D7sCIdAAAAAAAAAAAnSKQDAAAAAAAAAOAEpV0AAAAAAAAAwI0o7eJ7WJEOAAAAAAAAAIATJNIBAAAAAAAAAHCC0i4AAAAAAAAA4EY2LyjtYqO0i1uxIh0AAAAAAAAAACdIpAMAAAAAAAAA4ASlXQAAAAAAAADAjWyG+aVVzB7f17AiHQAAAAAAAAAAJ0ikAwAAAAAAAADgBIl0AAAAAAAAAACcoEY6AAAAAAAmslgsZocAAHCzcuP8zewY4D6sSAcAAAAAAAAAwAkS6QAAAAAAAAAAOEFpFwAAAAAAAABwI8Nmkc1mbukuw+TxfQ0r0gEAAAAAAAAAcIJEOgAAAAAAAAAATlDaBQAAAAAAAADcyGazyFZubmkVs0vL+BpWpAMAAAAAYCKLhUQHAADejkQ6AAAAAAAAAABOkEgHAAAAAAAAADey2SxecTPbQw89JIvFYr/FxsaaHZLLSKQDAAAAAAAAANxq48aN+te//mV2GG5DIh0AAAAAAAAA4DalpaW65557ZLPZzA7FbUikAwAAAAAAAIAbmV3SxezSLn/729+UlJQkSbrzzjtNi8OdSKQDAAAAAGAii8X8GrYAALjL3r179ac//UmSNHXqVI0ZM8bkiNyDRDoAAAAAAAAAoM4Mw9A999yj4uJiRUREaM6cOWaH5Db+ZgcAAAAAAAAAAL7E7NIqF2Kob6+99pp++uknSdJLL72kFi1a1HsMnsKKdAAAAAAAAABAnRw/flxPPPGEJOmaa67RXXfdZXJE7kUiHQAAAAAAAABQJ/fff7/OnTunwMBAvfHGGz53DRBKuwAAAAAAAACAGxk2i2zl5iaSjXos7TJ//nx98803kqTHH39cXbt2rbex6wuJdAAAAAAAAADwYenp6dW2iYmJcencOTk5+s1vfiNJ6tSpk5588kmXzuPtSKQDAAAAAGAiX/vqOwDA+8THx1fbxjAMl8790EMPKTMzU5L0xhtvKCgoyKXzeDsS6QAAAAAAAADgRjabRbZ6LK1SVQyetnTpUr3//vuSpBkzZmjkyJEeH9MsJNIBAAAAAAAAwIdt3LhR0dHRbj1nfn6+7rvvPklSVFSUZs+e7dbzexsS6QAAAAAAAADgw6Kjo12ugV6VJ598UikpKZKkl19+Wc2aNXPr+b0NiXQAAAAAAAAAcCNfL+2ydetW/fvf/5YkjRw5UjNmzPDYWN6CRDoAAAAAAAAAoMZ27twpm80mSTp27JgGDRpUZdusrCz7dnp6ukPbp556Stdff73nAnUjEukAAAAAAAAAAJccOnRIhw4dqlHbkpISbdiwwb5fMcnu7axmBwAAAAAAAAAAgDcjkQ4AAAAAAAAAbmSzecfNU2bOnCnDMGp0mzt3rr1f27ZtHY7NnDnTc0G6GYl0AAAAAAAAAACcIJEOAAAAAAAAAIATXGwUAAAAAAAAANzIZpNs5RbTY4D7sCIdAAAAAAAAAAAnSKQDAAAAAGAii8XcFYsAAKB6JNIBAAAAAAAAwI0Mm0U2k2+GzTs+qJ05c6YMw5BhGEpJSTE7HJeRSAcAAAAAAAAAwAkS6QAAAAAAAAAAOOFvdgAAAAAAAAAA4EsulFcxOwa4DyvSAQAAAAAAAABwgkQ6AAAAAAAAAABOkEh3g5KSEr3//vsaP3682rZtq+DgYEVHR2vIkCGaPXu2srOzPTZ2Xl6eXnvtNY0cOVIxMTEKCgpSTEyMRo0apddff115eXkeGxsAAAAAUHcWC1+9BwBfU15u8Yob3Ica6XW0d+9e3Xnnndq2bZvD/RkZGcrIyNC6dev00ksvae7cuRo/frxbx163bp2mTp2qI0eOONx/4sQJnThxQqtWrdJLL72kjz76SAMHDnTr2AAAAAAAAABwuSCRXgfHjx9XQkKC0tLSJJ1fRTBs2DB17NhRmZmZWr58uQoLC5WZmakJEyZoyZIlSkhIcMvYO3fu1Lhx43Tu3DlJUkBAgEaNGqWYmBilpqZq5cqVKisr0+HDhzV27Fj99NNP6tGjh1vGBgAAAAAAAIDLCYn0Opg6dao9id62bVt99dVX6tWrl/14dna27rjjDq1YsUKlpaWaPHmyDh06pKZNm9Zp3NLSUk2aNMmeRO/du7e+/PJLtW3b1t4mJSVFEyZM0I4dO3T27Fndcsst2r17t/z9mXIAAAAAAADAk2yGRTabuaVVbAalXdyJGukuWrx4sdauXStJCgwM1Ndff+2QRJekZs2a6csvv1T79u0lSbm5uXrxxRfrPPZbb72lQ4cOSZIiIiK0ZMkShyS6JMXGxmrJkiWKiIiQJO3fv1///e9/6zw2AAAAAAAAAFxuSKS76NVXX7Vvz5gxQz179qy0XWhoqJ577jn7/htvvKGysjK3jf3II48oOjq60nbR0dH63e9+V2k/AAAAAAAAAEDNkEh3QV5enlasWGHf//nPf+60/a233qrw8HBJ51elX1jJ7oqDBw9qz5499v2ZM2c6bV/x+M6dO+0r2QEAAAAAAAB4hmE7X9rFzJthcmkZX0Mi3QWJiYkqLi6WdH7F+YABA5y2DwoK0qBBg+z7K1eudHnsin3j4uLUqlUrp+2vvPJKderUyb6/atUql8cGAAAAALifxUKiAwAAb0ci3QXJycn27Z49e9boAp79+vWrtH9dxq54zvoYGwAAAAAAAAAuR9VngHGJffv22bcvvshnVdq0aWPf3rt3b4McGwAAAAAAAED1LpRXMTsGuA+JdBfk5OTYt6+44ooa9WnZsqV9Ozc3t0GNffz4cafH09PTa31OAAAAAPBVtXkPZRiGSktLVVhY6OmwUI+Kiooq3UbDw98mgAtIpLsgLy/Pvh0SElKjPhXbVezfEMZu3bp1rfsAAAAAwOWqNu+h8vPzdeDAAS1dutSDEcFMa9euNTsE1EF2drbZIQDwEtRId0HFT5MDAwNr1CcoKMi+XZdPM80cGwAAAAAAAAAuR6xId0FwcLB9u6SkpEZ9iouL7ds1XUnuLWOnpqY6PZ6enq74+PhanxcAAAAAfFFt3kOFhoaqU6dOGjt2bH2EhnpSVFRkX4k+bNgwh/fyaFiqK9UEVMVWbpGt3OQa6SaP72tIpLsgLCzMvl3TFd4V21Xs3xDGjomJqXUfAAAAALhc1eY9lMViUWBgYJ0WXMG7BQcHM78NGHMH4AJKu7ggKirKvn3y5Mka9cnIyLBvR0ZGNsixAQAAAAAAAOByRCLdBZ07d7ZvHz16tEZ9jh07Zt/u0qVLgxwbAAAAAAAAQPVshkU2m8k3g9Iu7kQi3QVdu3a1byclJamsrKzaPlu3bq20f13G3rZtW436uGtsAAAAAAAAALgckUh3wZAhQxQUFCRJys/P1+bNm522Ly4u1vr16+37o0aNcnnskSNH2rf37dun9PR0p+3T0tJ04MCBSvsDAAAAAAAAAKpHIt0FYWFhSkhIsO/PmzfPafvPP/9c586dkyRFRERo2LBhLo/dqVMndevWzb7/7rvvOm1f8XjPnj3VoUMHl8cGAAAAAAAAUD3DJtNLuxg2s38LvoVEuoseeOAB+/bcuXO1e/fuStsVFBTo6aeftu/fd9998vf3d9vYs2fPrvKioxkZGZo9e7Z9/8EHH6zTuAAAAAAAAABwOSKR7qLrr79e11xzjSSppKREN9xwg5KSkhza5OTkaMKECTp48KAkKTIyUo8//nil50tJSZHFYrHfVq9eXeXYv/jFL+wry3NycnTdddc5XFBUOn8h0uuuu065ubmSpLi4ON19990u/awAAAAAAAAAcDmr29Loy9xHH32k+Ph4paenKyUlRX369NHw4cPVvn17ZWVlafny5SooKJAk+fv7a8GCBWratGmdxw0ICNBnn32moUOHKi8vT9u2bVPHjh2VkJCgmJgYpaamauXKlSotLZUkhYeH67PPPqvzSngAAAAAAAAA1btQXsXsGOA+ZFbrICYmRitXrtSUKVO0fft22Ww2rVq1SqtWrXJo17x5c82dO9ehrnpd9e7dW0uXLtXUqVN15MgRlZaW6rvvvrukXfv27fXhhx+qR48ebhsbAAAAAAAAAC4nJNLrqEuXLtqwYYPmz5+vjz/+WLt379bJkyfVtGlTtW/fXhMnTtRdd92lZs2auX3swYMHa+fOnXrvvfe0YMEC7d+/Xzk5OYqKilJcXJwmT56s6dOnKywszO1jAwAAAAAAAMDlgkS6GwQGBmr69OmaPn26y+eIjY2VYRi17hcWFqYHHnjA4QKkAAAAAAAAAMxjK7fIVm5yaReTx/c1XGwUAAAAAAAAAAAnSKQDAAAAAGAii4UVgwAAeDtKuwAAAAAAAACAG9kMi2w2k0u7GHxQ606sSAcAAAAAAAAAwAkS6QAAAAAAAAAAOEFpFwAAAAAAAABwI5vNC0q7mDy+r2FFOgAAAAAAAAAATpBIBwAAAAAAAADACUq7AAAAAABgIouFr94DgK8xyi2ylZv7/G6YPL6vYUU6AAAAAAAAAABOkEgHAAAAAAAAAMAJSrsAAAAAAAAAgBvZbBbZbOaWVjF7fF/DinQAAAAAAAAAAJwgkQ4AAAAAAAAAgBMk0gEAAAAAMJHFwlfvAQDwdtRIBwAAAAAAAAB3MgzJZpgfA9yGFekAAAAAAAAAADhBIh0AAAAAAAAAACco7QIAAAAAAAAAbmS1GbKaXNrF7PF9DSvSAQAAAAAAAABwgkQ6AAAAAAAAAABOUNoFAAAAAAATWSwWs0MAALiZpdyQpdzc0ipmj+9rWJEOAAAAAAAAAIATJNIBAAAAAAAAAHCC0i4AAAAAAAAA4EYWmyGrzeTSLiaP72tYkQ4AAAAAAAAAgBMk0gEAAAAAAAAAcILSLgAAAAAAAADgRlbD/NIuVoPSLu7EinQAAAAAAAAAAJwgkQ4AAAAAAAAAgBOUdgEAAAAAAAAAN7LYDFlMLu1i9vi+hhXpAAAAAAAAAAA4QSIdAAAAAAAAAAAnKO0CAAAAAAAAAG5kLZes5eaWVrGWmzq8z2FFOgAAAAAAAAAATpBIBwAAAADARBaLxewQAABANSjtAgAAAAAAAABuZLUZstpMLu1i8vi+hkQ6AAAAAAAAAMAlKSkpWrZsmdasWaOkpCQdO3ZMeXl5Cg8PV0xMjAYPHqw777xTw4cPNzvUOiGRDgAAAAAAAAColW3btumXv/ylNm7cWOnxU6dO6dSpU0pKStKbb76pESNG6N1331WbNm3qOVL3IJEOAAAAAAAAAG5kMcwv7WIxPDv+vn37Lkmix8XFqUePHmrWrJlOnz6txMREHT9+XJK0evVqDR48WD/88IPat2/v0dg8gUQ6AAAAAAAAAMAlHTt21D333KNp06bpyiuvdDhms9k0d+5c/d///Z8KCgqUlpamqVOnKjExscFdbJtEOgAAAAAAJmpoiQQAACQpOjpac+fO1c9+9jP5+flV2sZqteruu+9WZGSkJk2aJElav369li5dqnHjxtVnuHVmNTsAAAAAAAAAAEDDMnz4cM2cObPKJHpFEydOVHx8vH3/22+/9WRoHkEiHQAAAAAAAADcyGIzvOLmTa6++mr7dkpKinmBuIhEOgAAAAAAAADAoyqWMisvLzcxEteQSAcAAAAAAAAAeFRSUpJ9u3Xr1iZG4houNgoAAAAAAAAAbmS1GbKaXFrF7PErSk1N1cqVK+37o0ePNjEa15BIBwAAAAAAAAAflp6eXm2bmJgYj43/0EMP2cu5tGnTRjfeeKPHxvIUEukAAAAAAJioYs1YAAA8IT4+vto2huGZFezvvvuuPvvsM/v+Cy+8oKCgII+M5Ukk0gEAAAAAAADAjazlhqzlJpd2MXl8Sdq8ebN++ctf2vdvv/123XnnnSZG5DoS6QAAAAAAAADgwzZu3Kjo6Oh6HfPIkSO68cYbVVRUJEnq2bOn3njjjXqNwZ1IpAMAAAAAAACAD4uOjvZoDfSLpaena8yYMcrIyJAktW/fXt9//72aNGlSbzG4G4l0AAAAAAAAAHAjq2HIajO5tIuHap5XJycnR2PGjNGhQ4cknU/iL1++vN5XxLub1ewAAAAAAAAAAAAN39mzZ3Xttddq9+7dkqSoqCgtW7ZM7dq1MzmyuiORDgAAAAAAAACok/z8fI0fP16bN2+WJDVu3Fjff/+9unfvbnJk7kFpFwAAAAAATGSxWMwOAQDgbjZDFpNLu6gexy8qKtJNN92kn376SZLUqFEjLV68WP3796+3GDyNFekAAAAAAAAAAJeUlpbqlltu0cqVKyVJQUFB+vLLL3X11VebHJl7kUgHAAAAAAAAANRaeXm57rzzTi1evFiS5O/vrwULFmj06NEmR+Z+lHYBAAAAAAAAADey2gxZTS7t4unxDcPQPffco4ULF54fz2rV+++/r5tuusmj45qFRDoAAAAAAAAAoFZee+01zZs3z77foUMH/fjjj/rxxx+r7RsVFaVZs2Z5MDr3I5EOAAAAAAAAAKiVzMxMh/0DBw7owIEDNerbtm1bEukAAAAAAAAAcDmzlkvWcpNLu5SbOrzP4WKjAAAAAAAAAIBaefbZZ2UYhku3lJQUs8OvNRLpAAAAAAAAAAA4QWkXAAAAAAAAAHAji2HIYjO3tIvFMHd8X8OKdAAAAAAAAAAAnCCRDgAAAAAAAACAE5R2AQAAAAAAAAA3stpsstpspscA92FFOgAAAAAAJrJYLGaHAAAAqkEiHQAAAAAAAAAAJ0ikAwAAAAAAAADgBDXSAQAAAAAAAMCNLDZDVpthegxwH1akAwAAAAAAAADgBIl0AAAAAAAAAACcoLQLAAAAAAAAALiRtdyQtdzc0ipmj+9rWJEOAAAAAICJLBaL2SEAAIBqkEgHAAAAAAAAAMAJSrsAAAAAAAAAgBtZDEMWm7mlVSwGpV3ciRXpAAAAAAAAAAA4QSIdAAAAAAAAAAAnKO0CAAAAAAAAAG5ktRmymlzaxezxfQ0r0gEAAAAAAAAAcIJEOgAAAAAAJrJYLGaHAAAAqkFpFwAAAAAAAABwI0q7+B5WpAMAAAAAAAAA4ASJdAAAAAAAAAAAnKC0CwAAAAAAAAC4kbXckLXc5NIuJo/va1iRDgAAAAAAAACAEyTSAQAAAAAwkcViMTsEAABQDUq7AAAAAAAAAIA7GZLFZnJpFSq7uBUr0gEAAAAAAAAAcIJEOgAAAAAAAAAATlDaBQAAAAAAAADcyGozZDW5tIvZ4/saEumos7KyMvt2enq6iZEAAAAAuFxUfO9R8T1JQ1Ax3tLSUp06dUrHjx83MSK4W2FhobKzsyVJx48fV0hIiMkRwVUN+bkG5iosOm12CF4Rgy+xGIbBRxOok02bNik+Pt7sMAAAAABcpjZu3KgBAwaYHUaN8R4KaJga2nMN6t/x48fVunVrs8OoVGpqqmJiYswOo0GjRjoAAAAAAPXo5MmTZocAAABqiRXpqLOioiIlJSVJkpo3by5/fyoGNRTp6en2lTAbN25UdHS0yRGhLphP38J8+hbm0/cwp76F+WyYysrKlJWVJUnq2bOngoODTY6o5g4ePKhOnTpJkhITE7129SJcx/OK72jIzzWof2VlZcrIyDA7jEq1bNmSnF0d8dtDnQUHB/PVJh8QHR3NV3x8CPPpW5hP38J8+h7m1Lcwnw1LbGys2SG4pGIirnXr1jzmfBzPKw1fQ32uQf3z9/fn792HUdoFAAAAAAAAAAAnSKQDAAAAAAAAAOAEiXQAAAAAAAAAAJwgkQ4AAAAAAAAAgBMk0gEAAAAAAAAAcIJEOgAAAAAAAAAATpBIBwAAAAAAAADACYthGIbZQQAAAAAAAAAA4K1YkQ4AAAAAAAAAgBMk0gEAAAAAAAAAcIJEOgAAAAAAAAAATpBIBwAAAAAAAADACRLpAAAAAAAAAAA4QSIdAAAAAAAAAAAnSKQDAAAAAAAAAOAEiXQAAAAAAAAAAJwgkQ4AAAAAAAAAgBMk0gEAAAAAAAAAcIJEOtDAlJSU6P3339f48ePVtm1bBQcHKzo6WkOGDNHs2bOVnZ3tsbHz8vL02muvaeTIkYqJiVFQUJBiYmI0atQovf7668rLy/PY2L7MjDlNTk7Wv/71L02ePFndunVTkyZNFBAQoGbNmumqq67Sb37zG23bts3t414OzPwbrcykSZNksVjstxEjRtTr+A2dN8zn2rVr9etf/1q9e/dWixYtFBwcrNatWys+Pl4PPPCAPv30U506dcrjcfgCs+bTMAwtW7ZMd999t3r06KGmTZvK399fTZs2Vbdu3fSzn/1MX331lcrLyz0yvi8qLy/Xzp079c477+j+++/XVVddpcDAwHp9ruN1EVzhDf9X4NnnkBUrVmj69OmKi4tTaGioIiMj1atXLz366KPau3evS+dMTk7Wo48+ql69eikyMlKhoaGKi4vTjBkztGLFCpdjBQDUkgGgwUhOTjb69u1rSKry1qJFC+Pbb791+9iJiYlGu3btnI7dvn17Y/369W4f25fV95wuXbrU6N69u9PxKt5uu+02Iycnxy1jXw7M/ButzMKFCy8Zf/jw4fUyti8wez4PHTpkjBs3rkZ/qy+99JJHYvAlZs3n0aNHjWHDhtVoHvv162fs2bPHreP7okWLFhmNGjVy+rv09HMdr4vgCrP/r+A8Tz2HnDlzxrj99tudnjcgIMD4y1/+Uqvz/vnPfzYCAgKcnnfKlCnG2bNnax0zAKB2LIZhGALg9Y4fP66BAwcqLS1NkmSxWDRs2DB17NhRmZmZWr58uQoLCyVJAQEBWrJkiRISEtwy9s6dOzV06FCdO3fOfv5Ro0YpJiZGqampWrlypcrKyiRJjRs31k8//aQePXq4ZWxfZsac/vWvf9Xvf/97+77FYlGvXr0UFxeniIgIZWVl6ccff1RWVpa9Tffu3bVmzRpFRUXVaWxfZ+bfaGVOnz6trl27KiMjw+H+4cOHa/Xq1R4b11eYPZ87duxQQkKCcnJy7Pd169ZN3bt3V2RkpM6dO6d9+/Zpx44dKisr00svvaRHHnnEbeP7GrPmMzMzU4MGDdKRI0fs98XExKhXr16Kjo5WWlqaduzYYY9Lkpo3b64NGzaoXbt2dR7fV82bN08///nPnbbx5HMdr4vgCrP/r+B/PPEcUlpaquuuu85hdXiPHj3Uv39/FRYWau3atQ6vyWbNmqWnn3662vM+/fTTev755+37rVq10tChQxUcHKwtW7Zo9+7d9mNjx47Vt99+K39//xrHDQCoJbMz+QBqpuJqtrZt2xo7duxwOJ6VlWUkJCTY20RGRhqnTp2q87glJSVGhw4d7Oft3bu3kZKS4tDmyJEjRu/eve1t4uLijNLS0jqP7evMmNMXXnjBkGT06dPHePXVV43s7OxL2hQXFxsvvPCC4efnZx978uTJdRr3cmDW32hV7r77bvvKp1tvvZUV6bVk5nweOXLEiIqKsp87ISHBSEpKqrRtTk6O8d///tf47rvv3DK2rzJrPn/+85/bzxkcHGy88cYbl/x/LCkpMV555RUjMDDQ3vamm26q89i+bO7cuYYk44orrjBuuOEGY9asWcbixYuN3/zmNx5/ruN1EVzlba8TLmeeeA556qmnHJ7vP/74Y4fjxcXFxqOPPuqwinz16tVOz7l8+XKH9o899phRXFzs0Oajjz4ygoOD7W1mzZpVq7gBALVDIh1oAL799lv7i6PAwEBj586dlbbLy8sz2rdvb2/7+9//vs5jv/rqq/bzRUREGGlpaZW2S0tLMyIiIuxt33jjjTqP7cvMmtPPPvvMWLRoUY3azpkzx+HFe3Jycp3G9mVm/o1WZsWKFfYxnnzySeOZZ54hkV4LZs/nmDFj7Oe8/fbbjbKyMrec93Jl1nwWFBQ4lA74xz/+4bT97Nmz7W39/PyM3NzcOo3vy9LT042jR49ecn99PNfxugiuMPv/Chy5+znk5MmTRmhoqL3v66+/XmXbiqVfBg8e7PS88fHx9rZ33HFHle1ee+01e7vw8HAjKyurxrEDAGqHRDrQAIwfP97+4ujee+912vaDDz5wWMlS1xVQ3bp1s5/vz3/+s9O2f/rTn+xte/XqVadxfZ2Zc1pTZWVlRqtWrexjv/zyy/UybkPkTfNZUFBgXy3ZsWNHo7CwkER6LZk5n1988YX9fG3atKHeqRuYNZ87duxw+DDy5MmTTtunp6c7tN+8ebPLY1+u6uO5jtdFcIU3vU5A1Vx9DnnxxRcdvoFis9mqbHv06FHDarXa22/durXSdhs3bnT4cPXYsWNVntNmsxmdOnWyt58zZ06NYwcA1I5VALxaXl6eQ6296ur53XrrrQoPD5ck5ebmau3atS6PffDgQe3Zs8e+P3PmTKftKx7fuXOnDh065PLYvszMOa0NPz8/DRw40L6fkpJSL+M2NN42n88884z9b++1115TcHCwW8/v68yez9dee82+/dBDD9nPDdeYOZ95eXkO+02bNnXaPiIiwmHfZrO5PDY8g9dFcIXZ/1fgeV988YV9e+bMmbJYLFW2bdOmjUPt+0WLFlV7zoSEBLVu3brKc1osFofnm6rOCQCoOxLpgJdLTExUcXGxJCk0NFQDBgxw2j4oKEiDBg2y769cudLlsSv2jYuLU6tWrZy2v/LKK9WpUyf7/qpVq1we25eZOae1VfGNQHl5eb2N25B403xu2bJFc+bMkSRNmzZNo0ePdtu5LxdmzmdmZqaWLVtm37/zzjtdPhfOM3M+27Rp47Bf8YJwldm1a5d9OyAgQF27dnV5bHgGr4vgCm96nQD3Kyoq0vr16+37I0aMqLZPxTZVzW/F54vanrPiYw4A4F4k0gEvl5ycbN/u2bNnja7C3q9fv0r712Xsiuesj7F9mZlzWltJSUn2bWcrYS5n3jKfZWVluueee1ReXq7IyEh7Qh21Y+Z8rlu3zr4KuXPnzmrRooXOnDmjl19+WQMHDlRUVJQaNWqktm3b6rbbbtP8+fNZtVwNM+czJiZGffv2te//8Y9/rPIDybKyMv3+97+370+fPl1hYWEujw3P4HURXOEtrxPgGfv27bP/L7ZYLA7P+1WpyfzW9vmmYpvy8nLt37+/2j4AgNojkQ54uX379tm327ZtW6M+FVfB7d27t0GO7csayu81MTFRBw4csO+zurly3jKfs2fP1vbt2yVJL730kpo3b+6W815uzJzPTZs22be7d++udevWqVevXnrkkUe0ceNG5ebmqrCwUMeOHdPChQs1ZcoU9e/fX0eOHHF5TF9n9t/nnDlzFBAQIElavHixrrrqKn322WdKSUlRUVGRjhw5ogULFqhfv372byNcffXVevnll+s0LjzD7McTGiYeN76t4vy2aNGiRiX1Ks5vbm6usrKyHI5nZmbq9OnT9v2aPG6Cg4MdXvvxuAEAz6j+43AApsrJybFvX3HFFTXq07JlS/t2bm5ugxzblzWE36vNZtNDDz1k3x84cKCuuuoqj4/bEHnDfB44cECzZs2SJA0fPrza+quompnzmZqaat8+c+aMxo8fb38j3a9fP/Xq1Uvl5eXatGmT/Q3y9u3bNXjwYG3evFkxMTEuj+2rzP77HDFihL777jvdeuutOnXqlLZv365bb721ynHvvvtuPf300woMDKzTuPAMsx9PaJh43Pi2us6vdH6OKybBK56ztue9kJTncQMAnsGKdMDLVbxYWUhISI36VGx38cXOGsrYvqwh/F6ff/55bdy4UZJktVo1e/Zsj4/ZUJk9n4Zh6N5771VRUZECAwP1+uuvO73IFZwzcz4rrj5bsWKFTp8+rWbNmmnlypXasmWL5s6dq/fee0/Jycn65JNP7OOePHlS06ZNc3lcX2b236ckjRo1SikpKXrmmWeqLOng5+enG2+8UVOmTCGJ7sW84fGEhofHjW+r6/xefI7K9nncAID3IJEOeLmioiL7dk3fXAcFBdm3CwsLG+TYvszbf69ff/21fXWzJD366KMaOnSoR8dsyMyez7feektr1qyRJP3+979Xly5d6nS+y52Z85mfn++w7+fnp6+//lojR468pO3kyZM1b948+/6aNWu0evVql8f2VWb/fUrS4cOHNWPGDD333HMqKytTbGysbr/9dv3iF7/QLbfcopYtW6q8vFxvvfWWevXqpeeee67OY8IzvOHxhIaHx41vq+v8SpfOccVzunpeHjcA4Bkk0gEvV7HOXklJSY36VLxKe01XMHjb2L7Mm3+vmzZt0pQpU2QYhiQpISFBzz//vMfG8wVmzmdaWpoee+wxSVJcXJzDxQrhGm95zpWkSZMmadCgQVW2nzx5skPJpfnz57s8tq8y+/l2/fr16tu3r7744gs1adJEn376qQ4fPqz58+frjTfe0MKFC5WamqpXXnlFQUFBstlseuaZZ/Tiiy/WaVx4htmPJzRMPG58W13nV7p0ji9+PcDjBgC8B4l0wMuFhYXZt2u6sqBiu4r9G9LYvsxbf6979uzRddddZ18VO2DAAH3xxRf2C+WhcmbO54MPPqgzZ85Ikt54441LVjih9rzlOVeSJk6cWG2fim0SExNdHttXmTmfp06d0qRJk3T27FlZLBZ98cUXuvXWWy8pveTv768HH3xQr732mv2+p556SsePH3d5bHiGt/7/hnfjcePb6jq/F5+jsn0eNwDgPUikA14uKirKvn3y5Mka9cnIyLBvR0ZGNsixfZk3/l6P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",
+ "text/plain": [
+ "