Python translation of Constrained Non-negative Matrix Factorization algorithm for source extraction from calcium imaging data.
The code implements a method for simultaneous source extraction and spike inference from large scale calcium imaging movies. The code is suitable for the analysis of somatic imaging data. Implementation for the analysis of dendritic/axonal imaging data will be added in the future.
The algorithm is presented in more detail in
Pnevmatikakis, E.A., Soudry, D., Gao, Y., Machado, T., Merel, J., ... & Paninski, L. (2016). Simultaneous denoising, deconvolution, and demixing of calcium imaging data. Neuron 89(2):285-299, http://dx.doi.org/10.1016/j.neuron.2015.11.037
Pnevmatikakis, E.A., Gao, Y., Soudry, D., Pfau, D., Lacefield, C., ... & Paninski, L. (2014). A structured matrix factorization framework for large scale calcium imaging data analysis. arXiv preprint arXiv:1409.2903. http://arxiv.org/abs/1409.2903
Andrea Giovannucci and Eftychios Pnevmatikakis
Center for Computational Biology, Simons Foundation, New York, NY
This repository contains a Python implementation of the spatio-temporal demixing, i.e., (source extraction) code for large scale calcium imaging data. Related code can be found in the following links:
- Constrained deconvolution and source extraction with CNMF
- MCMC spike inference
- Group LASSO initialization and spatial CNMF
- SIMA: The constrained deconvolution method has been integrated with SIMA, a Python based library for calcium imaging data analysis.
- Thunder: The group LASSO initialization and spatial CNMF method has been integrated with Thunder, a library for large scale neural data analysis with Spark.
Download and install Anaconda (Python 2.7) http://docs.continuum.io/anaconda/install
-
EASY WAY. type:
conda create -n CNMF ipython source activate CNMF conda install -c https://conda.anaconda.org/agiovann constrained_nmf conda install spyder conda install atlas (only Ubuntu) pip install 'tifffile>=0.7' pip install picos pip install cvxpy
-
ADVANCED WAY (with access to source code).
git clone --recursive https://github.com/agiovann/Constrained_NMF.git conda create -n CNMF ipython source activate CNMF conda install numpy scipy spyder openblas ipyparallel matplotlib bokeh jupyter scikit-image scikit-learn cvxopt conda install atlas (only Ubuntu) pip install 'tifffile>=0.7' pip install picos pip install cvxpy
This second option will not allow to import the package from every folder but only from within the Constrained_NMF folder. You can access it globally by setting the environment variable PYTHONPATH
export PYTHONPATH="/path/to/Constrained_NMF:$PYTHONPATH"
SCS:
if you get errors compiling scs when installing cvxpy you probably need to create a link to openblas or libgfortran in /usr/local/lib/, for instance:
sudo ln -s /Library/Frameworks/R.framework/Libraries/libgfortran.3.dylib /usr/local/lib/libgfortran.2.dylib
debian fortran compiler problems: if you get the error gcc: error trying to exec 'cc1plus': execvp: No such file or directory in ubuntu run or issues related to SCS type
sudo apt-get install g++ libatlas-base-dev gfortran libopenblas-dev
conda install openblas atlas
if still there are issues try
export LD_LIBRARY_PATH=/path_to_your_home/anaconda2/lib/
In case you used installation af point 1 above you will need to download the test files from https://github.com/agiovann/Constrained_NMF/releases/download/v0.3/Demo.zip
A. Go into the cloned folder, type python demo.py
B. Using the Spyder (type conda install spyder
) IDE.
1. Unzip the file Demo.zip (you do not need this step if you installed dusing method 2 above, just enter the Constrained_NMF folder and you will find all the required files there).
2. Open the file demo.py with spyder
3. Change the current folder of the console to the 'Demo' folder
3. Run the cells one by one inspecting the output
4. Remember to stop the cluster (last three lines of file). You can also stop it manually by typing in a terminal
'ipcluster stop'
C. Using notebook.
1. Unzip the file Demo.zip (you do not need this step if you installed dusing method 3 above, just enter the Constrained_NMF folder and you will find all the required files there).
2. type `ipython notebook`
3. open the notebook called demoCNMF.ipynb and run cell by cell inspecting the result
4. Remember to stop the cluster (last three lines of file). You can also stop it manually by typing in a terminal
'ipcluster stop'
Documentation of the code can be found here
The code uses the following libraries
- NumPy
- SciPy
- Matplotlib
- Scikit-Learn
- Tifffile For reading tiff files. Other choices can work there too.
- cvxpy for solving optimization problems
- ipyparallel for parallel processing
For the constrained deconvolution method (deconvolution.constrained_foopsi
) various solvers can be used, each of which requires some additional packages:
'cvxpy'
: (default) For this option, the following packages are needed:
'cvx'
: For this option, the following packages are needed:
- CVXOPT Required.
- PICOS Required.
- MOSEK Optional but strongly recommended for speed improvement, free for academic use.
'spgl1'
: For this option, the SPGL1 python implementation is required. It is by default imported as a submodule. The original implementation can be found at (https://github.com/mpf/spgl1).
In general 'cvxpy'
can be faster, when using the 'ECOS' or 'SCS' sovlers, which are included with the CVXPY installation. 'spgl1'
can also be very fast but the python implementation is not as fast as in Matlab and not thoroughly tested.
Please use the gitter chat room (use the button above) for questions and comments and create an issue for any bugs you might encounter.
The implementation of this package is based on the matlab implementation which can be found here. Some of the Matlab features are currently lacking, but will be included in future releases.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
The package comes with a toolbox to manipulate movies written in Python, Calblitz. If you want to give it a try use the demo_pipeline.py file. Before that you need to install some packages:
pip install pims
conda install opencv
conda install h5py