CaImAn (Calcium Imaging Analysis) is a computational toolbox for analyzing calcium imaging data. It provides efficient algorithms for motion correction, source extraction, and spike deconvolution, handling the complete pipeline from raw movies to neural activity traces.
Why CaImAn?
- Complete Pipeline: Motion correction → ROI detection → deconvolution
- Scalable: Handles large datasets efficiently
- State-of-the-Art: Implements latest algorithms (CNMF, OnACID)
- Flexible: Works with 2-photon, 1-photon, and 3-photon data
- Active Development: Regular updates and community support
Key Features
Motion Correction
import caiman as cm
from caiman.motion_correction import MotionCorrect
# Setup parameters
opts = cm.source_extraction.cnmf.params.CNMFParams()
opts.change_params({
'motion': {
'max_shifts': (6, 6),
'strides': (48, 48),
'overlaps': (24, 24)
}
})
# Perform motion correction
mc = MotionCorrect(fnames, dview=dview, **opts.get_group('motion'))
mc.motion_correct(save_movie=True)
Source Extraction (CNMF)
# Initialize CNMF
cnm = cm.source_extraction.cnmf.CNMF(
n_processes=1,
dview=dview,
Ain=None,
params=opts
)
# Fit the model
cnm.fit(images)
# Extract results
C = cnm.estimates.C # Calcium traces
S = cnm.estimates.S # Deconvolved spikes
A = cnm.estimates.A # Spatial components
Online Analysis (OnACID)
# For real-time or very large datasets
from caiman.source_extraction.cnmf import online_cnmf
cnm_online = online_cnmf.OnACID(params=opts)
cnm_online.fit_online()
Visualization
# View components
cnm.estimates.plot_contours(img=cn_filter)
# Inspect traces
cnm.estimates.view_components(img=cn_filter)
# Play movie with overlaid ROIs
cnm.estimates.play_movie(
imgs,
q_max=99.5,
magnification=2,
include_bck=False
)
Analysis Pipeline
1. Motion Correction
- Rigid correction (whole-frame shifts)
- Non-rigid correction (piecewise shifts)
- Quality assessment
2. Source Extraction
- Initialize components
- Iterate spatial/temporal updates
- Merge similar components
- Remove false positives
3. Deconvolution
- Estimate calcium decay time
- Deconvolve traces to infer spikes
- Get spike probabilities
4. Quality Control
- Signal-to-noise ratio
- Spatial footprint evaluation
- Temporal correlation
- Manual inspection
Getting Started
Install CaImAn:
# Recommended: use conda environment
conda create -n caiman -c conda-forge caiman
conda activate caiman
Basic pipeline:
import caiman as cm
from caiman.source_extraction import cnmf
from caiman.utils.visualization import inspect_correlation_pnr
# Start cluster for parallel processing
c, dview, n_processes = cm.cluster.setup_cluster(
backend='local', n_processes=None
)
# Motion correction
mc = cm.motion_correction.MotionCorrect(
fnames, dview=dview, **opts.get_group('motion')
)
mc.motion_correct(save_movie=True)
# Source extraction
cnm = cnmf.CNMF(n_processes, params=opts, dview=dview)
cnm.fit(images)
# Component evaluation
cnm.estimates.evaluate_components(images, cnm.params, dview=dview)
# Stop cluster
cm.stop_server(dview=dview)
Integration with Other Tools
Napari
Interactive visualization:
import napari
viewer = napari.Viewer()
viewer.add_image(movie)
viewer.add_labels(cnm.estimates.A.toarray().reshape(...))
Suite2p
Compare results or use for motion correction:
# Suite2p can be used for motion correction
# then CaImAn for source extraction, or vice versa
Tips
- Start with demo notebooks in CaImAn repository
- Use correlation/PNR images to set parameters
- Process small chunks first to tune parameters
- Save intermediate results frequently
- Use parallel processing for large datasets
- Validate results with manual ROI selection
- Check component evaluation metrics carefully
- Consider memory constraints for large movies