napari-colocalization 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. napari_colocalization-0.1.3/.copier-answers.yml +18 -0
  2. napari_colocalization-0.1.3/.github/ISSUE_TEMPLATE/bug_report.yml +87 -0
  3. napari_colocalization-0.1.3/.github/ISSUE_TEMPLATE/documentation.md +11 -0
  4. napari_colocalization-0.1.3/.github/ISSUE_TEMPLATE/feature_request.md +27 -0
  5. napari_colocalization-0.1.3/.github/ISSUE_TEMPLATE/task.md +11 -0
  6. napari_colocalization-0.1.3/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  7. napari_colocalization-0.1.3/.github/workflows/docs.yml +47 -0
  8. napari_colocalization-0.1.3/.github/workflows/test_and_deploy.yml +86 -0
  9. napari_colocalization-0.1.3/.gitignore +84 -0
  10. napari_colocalization-0.1.3/.pre-commit-config.yaml +17 -0
  11. napari_colocalization-0.1.3/LICENSE +22 -0
  12. napari_colocalization-0.1.3/PKG-INFO +179 -0
  13. napari_colocalization-0.1.3/README.md +143 -0
  14. napari_colocalization-0.1.3/docs/api.md +111 -0
  15. napari_colocalization-0.1.3/docs/img/logo.png +0 -0
  16. napari_colocalization-0.1.3/docs/img/quickstart_run.png +0 -0
  17. napari_colocalization-0.1.3/docs/img/quickstart_sample.png +0 -0
  18. napari_colocalization-0.1.3/docs/img/usage_widget_initial.png +0 -0
  19. napari_colocalization-0.1.3/docs/img/widget_overview.png +0 -0
  20. napari_colocalization-0.1.3/docs/img/widget_shapes.png +0 -0
  21. napari_colocalization-0.1.3/docs/index.md +70 -0
  22. napari_colocalization-0.1.3/docs/metrics.md +153 -0
  23. napari_colocalization-0.1.3/docs/usage.md +175 -0
  24. napari_colocalization-0.1.3/mkdocs.yml +68 -0
  25. napari_colocalization-0.1.3/pyproject.toml +122 -0
  26. napari_colocalization-0.1.3/setup.cfg +4 -0
  27. napari_colocalization-0.1.3/src/napari_colocalization/__init__.py +13 -0
  28. napari_colocalization-0.1.3/src/napari_colocalization/_analysis.py +243 -0
  29. napari_colocalization-0.1.3/src/napari_colocalization/_masking.py +107 -0
  30. napari_colocalization-0.1.3/src/napari_colocalization/_metrics.py +246 -0
  31. napari_colocalization-0.1.3/src/napari_colocalization/_plot.py +120 -0
  32. napari_colocalization-0.1.3/src/napari_colocalization/_sample_data.py +106 -0
  33. napari_colocalization-0.1.3/src/napari_colocalization/_version.py +24 -0
  34. napari_colocalization-0.1.3/src/napari_colocalization/_widget.py +754 -0
  35. napari_colocalization-0.1.3/src/napari_colocalization/napari.yaml +24 -0
  36. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/PKG-INFO +179 -0
  37. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/SOURCES.txt +46 -0
  38. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/dependency_links.txt +1 -0
  39. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/entry_points.txt +2 -0
  40. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/requires.txt +9 -0
  41. napari_colocalization-0.1.3/src/napari_colocalization.egg-info/top_level.txt +1 -0
  42. napari_colocalization-0.1.3/tests/__init__.py +0 -0
  43. napari_colocalization-0.1.3/tests/test_analysis.py +196 -0
  44. napari_colocalization-0.1.3/tests/test_masking.py +83 -0
  45. napari_colocalization-0.1.3/tests/test_metrics.py +179 -0
  46. napari_colocalization-0.1.3/tests/test_sample_data.py +58 -0
  47. napari_colocalization-0.1.3/tests/test_widget.py +263 -0
  48. napari_colocalization-0.1.3/tox.ini +33 -0
@@ -0,0 +1,18 @@
1
+ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY
2
+ _commit: v2.1.1
3
+ _src_path: https://github.com/napari/napari-plugin-template
4
+ display_name: Colocalization
5
+ email: ''
6
+ full_name: Jesko Wagner
7
+ github_repository_url: https://github.com/jeskowagner/napari-colocalization
8
+ github_username_or_organization: jeskowagner
9
+ include_reader_plugin: false
10
+ include_sample_data_plugin: true
11
+ include_widget_plugin: true
12
+ include_writer_plugin: false
13
+ install_dependabot: false
14
+ install_precommit: true
15
+ license: MIT
16
+ module_name: napari_colocalization
17
+ plugin_name: napari-colocalization
18
+ short_description: Colocalization analysis of multi-channel images
@@ -0,0 +1,87 @@
1
+ name: "\U0001F41B Bug Report"
2
+ description: Report a bug encountered while using napari-colocalization
3
+ labels:
4
+ - "bug"
5
+
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ Thanks for taking the time to report this issue! 🙏🏼
11
+
12
+ Please fill out the sections below to help us reproduce the problem.
13
+
14
+ - type: textarea
15
+ id: bug-report
16
+ attributes:
17
+ label: "\U0001F41B Bug Report"
18
+ description: "Please provide a clear and concise description of the bug."
19
+ placeholder: "What went wrong? What did you expect to happen?"
20
+ validations:
21
+ required: true
22
+
23
+ - type: textarea
24
+ id: steps-to-reproduce
25
+ attributes:
26
+ label: "\U0001F4A1 Steps to Reproduce"
27
+ description: "Please provide a minimal code snippet or list of steps to reproduce the bug."
28
+ placeholder: |
29
+ 1. Go to '...'
30
+ 2. Click on '....'
31
+ 3. Scroll down to '....'
32
+ 4. See error
33
+ validations:
34
+ required: true
35
+
36
+ - type: textarea
37
+ id: expected-behavior
38
+ attributes:
39
+ label: "\U0001F4A1 Expected Behavior"
40
+ description: "Please provide a clear and concise description of what you expected to happen."
41
+ placeholder: "What did you expect to happen?"
42
+
43
+ - type: textarea
44
+ id: environment
45
+ attributes:
46
+ label: "\U0001F30E Environment"
47
+ description: |
48
+ Please provide detailed information regarding your environment. Please paste the output of `napari --info` here or copy the information from the "napari info" dialog in the napari Help menu.
49
+
50
+ Otherwise, please provide information regarding your operating system (OS), Python version, napari version, Qt backend and version, Qt platform, method of installation, and any other relevant information related to your environment.
51
+
52
+
53
+ placeholder: |
54
+ napari: 0.5.0
55
+ Platform: macOS-13.2.1-arm64-arm-64bit
56
+ System: MacOS 13.2.1
57
+ Python: 3.11.4 (main, Aug 7 2023, 20:34:01) [Clang 14.0.3 (clang-1403.0.22.14.1)]
58
+ Qt: 5.15.10
59
+ PyQt5: 5.15.10
60
+ NumPy: 1.25.1
61
+ SciPy: 1.11.1
62
+ Dask: 2023.7.1
63
+ VisPy: 0.13.0
64
+ magicgui: 0.7.2
65
+ superqt: 0.5.4
66
+ in-n-out: 0.1.8
67
+ app-model: 0.2.0
68
+ npe2: 0.7.2
69
+
70
+ OpenGL:
71
+ - GL version: 2.1 Metal - 83
72
+ - MAX_TEXTURE_SIZE: 16384
73
+
74
+ Screens:
75
+ - screen 1: resolution 1512x982, scale 2.0
76
+
77
+ Settings path:
78
+ - /Users/.../napari/napari_5c6993c40c104085444cfc0c77fa392cb5cb8f56/settings.yaml
79
+ validations:
80
+ required: true
81
+
82
+ - type: textarea
83
+ id: additional-context
84
+ attributes:
85
+ label: "\U0001F4A1 Additional Context"
86
+ description: "Please provide any additional information or context regarding the problem here."
87
+ placeholder: "Add any other context about the problem here."
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "\U0001F4DA Documentation"
3
+ about: Report an issue with napari-colocalization documentation
4
+ title: ''
5
+ labels: documentation
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ ## 📚 Documentation
11
+ <!-- A clear and concise description of the documentation that needs to be created/updated -->
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: "\U0001F680 Feature Request"
3
+ about: Submit a proposal/request for a new napari-colocalization feature
4
+ title: ''
5
+ labels: feature
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ ## 🚀 Feature
11
+ <!-- A clear and concise description of the feature proposal -->
12
+
13
+ ## Motivation
14
+
15
+ <!-- Please outline the motivation for the proposal. Is your feature request related to a problem? e.g., I'm always frustrated when [...]. If this is related to another GitHub issue, please link here too -->
16
+
17
+ ## Pitch
18
+
19
+ <!-- A clear and concise description of what you want to happen. -->
20
+
21
+ ## Alternatives
22
+
23
+ <!-- A clear and concise description of any alternative solutions or features you've considered, if any. -->
24
+
25
+ ## Additional context
26
+
27
+ <!-- Add any other context or screenshots about the feature request here. -->
@@ -0,0 +1,11 @@
1
+ ---
2
+ name: "\U0001F9F0 Task"
3
+ about: Maintenance, follow-ups, and other defined to-do items
4
+ title: ''
5
+ labels: task
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ ## 🧰 Task
11
+ <!-- A clear and concise description of the task -->
@@ -0,0 +1,12 @@
1
+ # References and relevant issues
2
+ <!-- What relevant resources were used in the creation of this PR?
3
+ If this PR addresses an existing issue on the repo,
4
+ please link to that issue here as "Closes #(issue-number)"
5
+ If this PR depends on another PR/issue (even in another repo),
6
+ please link to it with "Depends on #PR-number" or "Depends on org/repo#PR-number"
7
+ -->
8
+
9
+ # Description
10
+ <!-- What does this pull request (PR) do? Is it a new feature, a bug fix,
11
+ an improvement, or something else? Why is it necessary? If relevant, please add
12
+ a screenshot or a screen capture: "An image is worth a thousand words!" -->
@@ -0,0 +1,47 @@
1
+ name: docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'mkdocs.yml'
9
+ - 'src/napari_colocalization/**'
10
+ - 'README.md'
11
+ - '.github/workflows/docs.yml'
12
+ workflow_dispatch:
13
+
14
+ permissions:
15
+ contents: write # mkdocs gh-deploy pushes to gh-pages
16
+
17
+ concurrency:
18
+ group: docs-${{ github.ref }}
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ build-and-deploy:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ with:
27
+ fetch-depth: 0 # mkdocs gh-deploy needs full history
28
+
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: '3.12'
32
+ cache: pip
33
+
34
+ - name: Install package and docs dependencies
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ # Install the package itself so mkdocstrings can import
38
+ # napari_colocalization and read its docstrings.
39
+ python -m pip install . --group docs
40
+
41
+ - name: Configure Git for gh-deploy
42
+ run: |
43
+ git config --global user.name 'github-actions[bot]'
44
+ git config --global user.email 'github-actions[bot]@users.noreply.github.com'
45
+
46
+ - name: Build and deploy to gh-pages
47
+ run: mkdocs gh-deploy --force --clean --verbose
@@ -0,0 +1,86 @@
1
+ # This workflows will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+ name: tests
4
+
5
+ on:
6
+ push:
7
+ branches:
8
+ - main
9
+ - npe2
10
+ tags:
11
+ - "v*" # Push events to matching v*, i.e. v1.0, v20.15.10
12
+ pull_request:
13
+ branches:
14
+ - main
15
+ - npe2
16
+ workflow_dispatch:
17
+
18
+ concurrency:
19
+ group: ${{ github.workflow }}-${{ github.ref }}
20
+ cancel-in-progress: true
21
+
22
+ jobs:
23
+ test:
24
+ name: ${{ matrix.platform }} py${{ matrix.python-version }}
25
+ runs-on: ${{ matrix.platform }}
26
+ timeout-minutes: 30
27
+ permissions:
28
+ id-token: write # needed for codecov OIDC authentication
29
+ strategy:
30
+ fail-fast: false
31
+ matrix:
32
+ platform: [ubuntu-latest, windows-latest, macos-latest]
33
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
34
+
35
+ steps:
36
+ - uses: actions/checkout@v6
37
+
38
+ - name: Setup python
39
+ uses: astral-sh/setup-uv@v7
40
+ with:
41
+ python-version: ${{ matrix.python-version }}
42
+ activate-environment: "true"
43
+ - name: Install Windows OpenGL
44
+ uses: pyvista/setup-headless-display-action@v4.3
45
+ with:
46
+ qt: true
47
+ wm: herbstluftwm
48
+
49
+
50
+ # note: if you need dependencies from conda, considering using
51
+ # setup-miniconda: https://github.com/conda-incubator/setup-miniconda
52
+ # and
53
+ # tox-conda: https://github.com/tox-dev/tox-conda
54
+ # this runs the platform-specific tests declared in tox.ini
55
+ - name: Test with tox
56
+ run: uvx --with tox-gh-actions tox
57
+ env:
58
+ PLATFORM: ${{ matrix.platform }}
59
+
60
+ - name: Coverage
61
+ uses: codecov/codecov-action@v6
62
+ with:
63
+ use_oidc: true # reliable tokenless codecov uploads
64
+
65
+ build-and-inspect-package:
66
+ name: Build & inspect package.
67
+ runs-on: ubuntu-latest
68
+
69
+ steps:
70
+ - uses: actions/checkout@v6
71
+ - uses: hynek/build-and-inspect-python-package@v2
72
+
73
+ deploy:
74
+ needs: [test, build-and-inspect-package]
75
+ runs-on: ubuntu-latest
76
+ if: contains(github.ref, 'tags')
77
+ permissions:
78
+ id-token: write
79
+ steps:
80
+ - name: Download built artifact to dist/
81
+ uses: actions/download-artifact@v8
82
+ with:
83
+ name: Packages
84
+ path: dist
85
+ - name: Publish to PyPI
86
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,84 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ env/
12
+ build/
13
+ develop-eggs/
14
+ dist/
15
+ downloads/
16
+ eggs/
17
+ .eggs/
18
+ lib/
19
+ lib64/
20
+ parts/
21
+ sdist/
22
+ var/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # PyInstaller
28
+ # Usually these files are written by a python script from a template
29
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
30
+ *.manifest
31
+ *.spec
32
+
33
+ # Installer logs
34
+ pip-log.txt
35
+ pip-delete-this-directory.txt
36
+
37
+ # Unit test / coverage reports
38
+ htmlcov/
39
+ .tox/
40
+ .coverage
41
+ .coverage.*
42
+ .cache
43
+ nosetests.xml
44
+ coverage.xml
45
+ *,cover
46
+ .hypothesis/
47
+ .napari_cache
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Django stuff:
54
+ *.log
55
+ local_settings.py
56
+
57
+ # Flask instance folder
58
+ instance/
59
+
60
+ # Sphinx documentation
61
+ docs/_build/
62
+
63
+ # MkDocs documentation
64
+ /site/
65
+
66
+ # PyBuilder
67
+ target/
68
+
69
+ # Pycharm and VSCode
70
+ .idea/
71
+ venv/
72
+ .vscode/
73
+
74
+ # IPython Notebook
75
+ .ipynb_checkpoints
76
+
77
+ # pyenv
78
+ .python-version
79
+
80
+ # OS
81
+ .DS_Store
82
+
83
+ # written by setuptools_scm
84
+ **/_version.py
@@ -0,0 +1,17 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v6.0.0
4
+ hooks:
5
+ - id: check-docstring-first
6
+ - id: end-of-file-fixer
7
+ - id: trailing-whitespace
8
+ - id: check-yaml # checks for correct yaml syntax for github actions ex.
9
+ - repo: https://github.com/astral-sh/ruff-pre-commit
10
+ rev: v0.14.6
11
+ hooks:
12
+ - id: ruff-check
13
+ - id: ruff-format
14
+ - repo: https://github.com/napari/napari-plugin-checks
15
+ rev: v0.3.0
16
+ hooks:
17
+ - id: napari-plugin-checks
@@ -0,0 +1,22 @@
1
+
2
+ The MIT License (MIT)
3
+
4
+ Copyright (c) 2026 Jesko Wagner
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
@@ -0,0 +1,179 @@
1
+ Metadata-Version: 2.4
2
+ Name: napari-colocalization
3
+ Version: 0.1.3
4
+ Summary: Colocalization analysis of multi-channel images
5
+ Author: Jesko Wagner
6
+ Author-email: 35219306+jeskowagner@users.noreply.github.com
7
+ License-Expression: MIT
8
+ Project-URL: Bug Tracker, https://github.com/jeskowagner/napari-colocalization/issues
9
+ Project-URL: Documentation, https://github.com/jeskowagner/napari-colocalization#README.md
10
+ Project-URL: Source Code, https://github.com/jeskowagner/napari-colocalization
11
+ Project-URL: User Support, https://github.com/jeskowagner/napari-colocalization/issues
12
+ Classifier: Development Status :: 2 - Pre-Alpha
13
+ Classifier: Framework :: napari
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: numpy
28
+ Requires-Dist: magicgui
29
+ Requires-Dist: qtpy
30
+ Requires-Dist: scikit-image
31
+ Requires-Dist: scipy
32
+ Requires-Dist: matplotlib
33
+ Provides-Extra: all
34
+ Requires-Dist: napari[all]; extra == "all"
35
+ Dynamic: license-file
36
+
37
+ <p align="center">
38
+ <!-- TODO: replace with final logo -->
39
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/logo.png" alt="napari-colocalization logo" width="160"/>
40
+ </p>
41
+
42
+ # napari-colocalization
43
+
44
+ [![License MIT](https://img.shields.io/pypi/l/napari-colocalization.svg?color=green)](https://github.com/DBI-INFRA/napari-colocalization/raw/main/LICENSE)
45
+ [![PyPI](https://img.shields.io/pypi/v/napari-colocalization.svg?color=green)](https://pypi.org/project/napari-colocalization)
46
+ [![Python Version](https://img.shields.io/pypi/pyversions/napari-colocalization.svg?color=green)](https://python.org)
47
+ [![tests](https://github.com/DBI-INFRA/napari-colocalization/workflows/tests/badge.svg)](https://github.com/DBI-INFRA/napari-colocalization/actions)
48
+ [![codecov](https://codecov.io/gh/DBI-INFRA/napari-colocalization/branch/main/graph/badge.svg)](https://codecov.io/gh/DBI-INFRA/napari-colocalization)
49
+ [![napari hub](https://img.shields.io/endpoint?url=https://api.napari-hub.org/shields/napari-colocalization)](https://napari-hub.org/plugins/napari-colocalization)
50
+ [![npe2](https://img.shields.io/badge/plugin-npe2-blue?link=https://napari.org/stable/plugins/index.html)](https://napari.org/stable/plugins/index.html)
51
+
52
+ > ⚠️ **Under construction — pre-alpha.** APIs, UI, and outputs may change
53
+ > without notice. Not recommended for production analysis yet; use at your
54
+ > own risk and please report rough edges via the
55
+ > [issue tracker](https://github.com/DBI-INFRA/napari-colocalization/issues).
56
+
57
+ Interactive intensity-colocalization analysis for [napari](https://napari.org).
58
+ Pick two channels (or one multi-channel image), optionally restrict the
59
+ analysis to a region drawn as shapes or labels, choose your metric, and get a
60
+ results table plus an intensity-vs-intensity scatter plot — all without leaving
61
+ napari.
62
+
63
+ <p align="center">
64
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/widget_overview.png" alt="napari-colocalization widget" width="780"/>
65
+ </p>
66
+
67
+ ## Features
68
+
69
+ - **Three correlation metrics**: Pearson (PCC), Spearman rank (SRCC), and
70
+ Manders' coefficients M1/M2 (MCC).
71
+ - **Pairwise or all-to-all** mode: analyse two grayscale layers, or every
72
+ channel pair within a single multi-channel layer.
73
+ - **2D and 3D** support natively (no time-series for now).
74
+ - **Region-restricted analysis** via a Shapes or Labels layer — each non-zero
75
+ region is reported on its own row.
76
+ - **Manders thresholds**: choose **Costes auto** (iterative regression-based)
77
+ or **Manual**.
78
+ - **Interactive results**: in-widget table, scatter plot of the selected row,
79
+ multi-row selection that highlights all matching shapes/labels in the viewer.
80
+ - **CSV export** of the current table.
81
+
82
+ ## Installation
83
+
84
+ ```bash
85
+ pip install napari-colocalization
86
+ ```
87
+
88
+ If napari isn't already installed, install both at once:
89
+
90
+ ```bash
91
+ pip install "napari-colocalization[all]"
92
+ ```
93
+
94
+ For the latest development version:
95
+
96
+ ```bash
97
+ pip install git+https://github.com/DBI-INFRA/napari-colocalization.git
98
+ ```
99
+
100
+ ## Quick start
101
+
102
+ 1. Launch napari.
103
+ 2. Load sample data: **File → Open Sample → napari-colocalization →
104
+ Colocalization sample (2D)** (a 3D sample is also provided).
105
+
106
+ <p align="center">
107
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/quickstart_sample.png" alt="Open Sample menu" width="520"/>
108
+ </p>
109
+
110
+ 3. Open the widget: **Plugins → Colocalization Analysis**. Two image layers
111
+ `channel_a` and `channel_b` are auto-selected for pairwise mode.
112
+
113
+ 4. Click **Run**. The results table populates with a single row (the whole
114
+ image), and the scatter plot below shows the intensity pairs with the
115
+ metric values overlaid.
116
+
117
+ <p align="center">
118
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/quickstart_run.png" alt="Run result" width="780"/>
119
+ </p>
120
+
121
+ <p align="center">
122
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/widget_overview.png" alt="napari-colocalization widget" width="780"/>
123
+ </p>
124
+
125
+ 5. *(Optional)* Add a Shapes layer, draw a few rectangles or polygons, set
126
+ **Region** to *Shapes* and pick the layer. Re-run — the table now has one
127
+ row per shape, and clicking a row highlights the matching shape in the
128
+ viewer.
129
+
130
+ <p align="center">
131
+ <img src="https://raw.githubusercontent.com/DBI-INFRA/napari-colocalization/main/docs/img/widget_shapes.png" alt="napari-colocalization widget" width="780"/>
132
+ </p>
133
+
134
+ See [docs/usage.md](docs/usage.md) for the full walkthrough.
135
+
136
+ ## Documentation
137
+
138
+ - **[Usage guide](docs/usage.md)** — every control in the widget, in order.
139
+ - **[Metrics](docs/metrics.md)** — what PCC, SRCC and MCC mean, when to use
140
+ which, and how the Costes auto-threshold works.
141
+ - **[Python API](docs/api.md)** — calling the pure-compute layer
142
+ (`pearson`, `spearman`, `manders`, `costes_threshold`,
143
+ `analyse_pairwise`, `analyse_all_to_all`) from scripts or notebooks.
144
+
145
+ ## Related projects
146
+
147
+ - [Coloc 2](https://imagej.net/plugins/coloc-2) — the reference ImageJ
148
+ colocalization plugin; this plugin follows it in spirit.
149
+ - [scikit-image colocalization metrics](https://scikit-image.org/docs/stable/auto_examples/applications/plot_colocalization_metrics.html)
150
+ — the underlying implementations of PCC and Manders.
151
+
152
+ ## Contributing
153
+
154
+ Contributions are welcome. Run the test suite with:
155
+
156
+ ```bash
157
+ pip install -e . --group dev
158
+ python -m pytest tests/ -v
159
+ ```
160
+
161
+ Pre-commit hooks (ruff lint + format, napari-plugin-checks) ship with the
162
+ repo:
163
+
164
+ ```bash
165
+ pre-commit install
166
+ pre-commit run --all-files
167
+ ```
168
+
169
+ Please keep test coverage at or above the current level when submitting a PR.
170
+
171
+ ## License
172
+
173
+ Distributed under the terms of the [MIT](http://opensource.org/licenses/MIT)
174
+ licence; `napari-colocalization` is free and open-source software.
175
+
176
+ ## Issues
177
+
178
+ Found a bug or have a feature request? Please
179
+ [open an issue](https://github.com/DBI-INFRA/napari-colocalization/issues).