senoquant 1.0.0b2__py3-none-any.whl → 1.0.0b4__py3-none-any.whl
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.
- senoquant/__init__.py +6 -2
- senoquant/_reader.py +1 -1
- senoquant/_widget.py +9 -1
- senoquant/reader/core.py +201 -18
- senoquant/tabs/__init__.py +2 -0
- senoquant/tabs/batch/backend.py +76 -27
- senoquant/tabs/batch/frontend.py +127 -25
- senoquant/tabs/quantification/features/marker/dialog.py +26 -6
- senoquant/tabs/quantification/features/marker/export.py +97 -24
- senoquant/tabs/quantification/features/marker/rows.py +2 -2
- senoquant/tabs/quantification/features/spots/dialog.py +41 -11
- senoquant/tabs/quantification/features/spots/export.py +163 -10
- senoquant/tabs/quantification/frontend.py +2 -2
- senoquant/tabs/segmentation/frontend.py +46 -9
- senoquant/tabs/segmentation/models/cpsam/model.py +1 -1
- senoquant/tabs/segmentation/models/default_2d/model.py +22 -77
- senoquant/tabs/segmentation/models/default_3d/model.py +8 -74
- senoquant/tabs/segmentation/stardist_onnx_utils/_csbdeep/tools/create_zip_contents.py +0 -0
- senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py +13 -13
- senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/stardist_libs.py +171 -0
- senoquant/tabs/spots/frontend.py +96 -5
- senoquant/tabs/spots/models/rmp/details.json +3 -9
- senoquant/tabs/spots/models/rmp/model.py +341 -266
- senoquant/tabs/spots/models/ufish/details.json +32 -0
- senoquant/tabs/spots/models/ufish/model.py +327 -0
- senoquant/tabs/spots/ufish_utils/__init__.py +13 -0
- senoquant/tabs/spots/ufish_utils/core.py +387 -0
- senoquant/tabs/visualization/__init__.py +1 -0
- senoquant/tabs/visualization/backend.py +306 -0
- senoquant/tabs/visualization/frontend.py +1113 -0
- senoquant/tabs/visualization/plots/__init__.py +80 -0
- senoquant/tabs/visualization/plots/base.py +152 -0
- senoquant/tabs/visualization/plots/double_expression.py +187 -0
- senoquant/tabs/visualization/plots/spatialplot.py +156 -0
- senoquant/tabs/visualization/plots/umap.py +140 -0
- senoquant/utils.py +1 -1
- senoquant-1.0.0b4.dist-info/METADATA +162 -0
- {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/RECORD +53 -30
- {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/top_level.txt +1 -0
- ufish/__init__.py +1 -0
- ufish/api.py +778 -0
- ufish/model/__init__.py +0 -0
- ufish/model/loss.py +62 -0
- ufish/model/network/__init__.py +0 -0
- ufish/model/network/spot_learn.py +50 -0
- ufish/model/network/ufish_net.py +204 -0
- ufish/model/train.py +175 -0
- ufish/utils/__init__.py +0 -0
- ufish/utils/img.py +418 -0
- ufish/utils/log.py +8 -0
- ufish/utils/spot_calling.py +115 -0
- senoquant/tabs/spots/models/udwt/details.json +0 -103
- senoquant/tabs/spots/models/udwt/model.py +0 -482
- senoquant-1.0.0b2.dist-info/METADATA +0 -193
- {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/WHEEL +0 -0
- {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/entry_points.txt +0 -0
- {senoquant-1.0.0b2.dist-info → senoquant-1.0.0b4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""UMAP plot handler for visualization."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Iterable
|
|
7
|
+
|
|
8
|
+
from .base import PlotData, SenoQuantPlot
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class UMAPData(PlotData):
|
|
12
|
+
"""Configuration data for UMAP plot."""
|
|
13
|
+
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class UMAPPlot(SenoQuantPlot):
|
|
18
|
+
"""UMAP dimensionality reduction plot handler."""
|
|
19
|
+
|
|
20
|
+
feature_type = "UMAP"
|
|
21
|
+
order = 1
|
|
22
|
+
|
|
23
|
+
def build(self) -> None:
|
|
24
|
+
"""Build the UI for UMAP plot configuration."""
|
|
25
|
+
# Minimal UI for now; can add controls for n_components, metric, etc. later
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
def plot(
|
|
29
|
+
self,
|
|
30
|
+
temp_dir: Path,
|
|
31
|
+
input_path: Path,
|
|
32
|
+
export_format: str,
|
|
33
|
+
markers: list[str] | None = None,
|
|
34
|
+
thresholds: dict[str, float] | None = None,
|
|
35
|
+
) -> Iterable[Path]:
|
|
36
|
+
"""Generate UMAP plot from input CSV.
|
|
37
|
+
|
|
38
|
+
Parameters
|
|
39
|
+
----------
|
|
40
|
+
temp_dir : Path
|
|
41
|
+
Temporary directory to write plot output.
|
|
42
|
+
input_path : Path
|
|
43
|
+
Path to input CSV file or folder containing CSV files.
|
|
44
|
+
export_format : str
|
|
45
|
+
Output format ("png", "svg", or "pdf").
|
|
46
|
+
markers : list of str, optional
|
|
47
|
+
List of selected markers to include.
|
|
48
|
+
thresholds : dict, optional
|
|
49
|
+
Dictionary of {marker_name: threshold_value} for filtering.
|
|
50
|
+
|
|
51
|
+
Returns
|
|
52
|
+
-------
|
|
53
|
+
iterable of Path
|
|
54
|
+
Paths to generated plot files.
|
|
55
|
+
"""
|
|
56
|
+
try:
|
|
57
|
+
try:
|
|
58
|
+
import pandas as pd
|
|
59
|
+
except ImportError:
|
|
60
|
+
print("[UMAPPlot] pandas is not installed; skipping plot generation.")
|
|
61
|
+
return []
|
|
62
|
+
try:
|
|
63
|
+
import matplotlib.pyplot as plt
|
|
64
|
+
except ImportError:
|
|
65
|
+
print("[UMAPPlot] matplotlib is not installed; skipping plot generation.")
|
|
66
|
+
return []
|
|
67
|
+
try:
|
|
68
|
+
from umap import UMAP as UMAPReducer
|
|
69
|
+
except ImportError:
|
|
70
|
+
print("[UMAPPlot] umap-learn is not installed; skipping plot generation.")
|
|
71
|
+
return []
|
|
72
|
+
|
|
73
|
+
print(f"[UMAPPlot] Starting with input_path={input_path}")
|
|
74
|
+
# Find the first data file (CSV or Excel) in the input folder
|
|
75
|
+
data_files = list(input_path.glob("*.csv")) + list(input_path.glob("*.xlsx")) + list(input_path.glob("*.xls"))
|
|
76
|
+
print(f"[UMAPPlot] Found {len(data_files)} data files")
|
|
77
|
+
if not data_files:
|
|
78
|
+
print(f"[UMAPPlot] No CSV/Excel files found in {input_path}")
|
|
79
|
+
return []
|
|
80
|
+
|
|
81
|
+
data_file = data_files[0]
|
|
82
|
+
print(f"[UMAPPlot] Reading {data_file}")
|
|
83
|
+
if data_file.suffix.lower() in ('.xlsx', '.xls'):
|
|
84
|
+
df = pd.read_excel(data_file)
|
|
85
|
+
else:
|
|
86
|
+
df = pd.read_csv(data_file)
|
|
87
|
+
print(f"[UMAPPlot] Loaded dataframe with shape {df.shape}")
|
|
88
|
+
if df.empty:
|
|
89
|
+
print(f"[UMAPPlot] DataFrame is empty")
|
|
90
|
+
return []
|
|
91
|
+
|
|
92
|
+
# Apply thresholds if provided
|
|
93
|
+
if thresholds:
|
|
94
|
+
for marker, thresh in thresholds.items():
|
|
95
|
+
col_name = f"{marker}_mean_intensity"
|
|
96
|
+
if col_name in df.columns:
|
|
97
|
+
# Clip values below threshold to 0
|
|
98
|
+
df.loc[df[col_name] < thresh, col_name] = 0
|
|
99
|
+
|
|
100
|
+
# Select numeric columns for UMAP
|
|
101
|
+
if markers:
|
|
102
|
+
numeric_cols = [f"{m}_mean_intensity" for m in markers if f"{m}_mean_intensity" in df.columns]
|
|
103
|
+
print(f"[UMAPPlot] Using {len(numeric_cols)} selected markers for UMAP")
|
|
104
|
+
else:
|
|
105
|
+
numeric_cols = df.select_dtypes(include=["number"]).columns
|
|
106
|
+
print(f"[UMAPPlot] Found {len(numeric_cols)} numeric columns (default)")
|
|
107
|
+
|
|
108
|
+
if len(numeric_cols) < 2:
|
|
109
|
+
print(f"[UMAPPlot] Need at least 2 numeric columns for UMAP, found {len(numeric_cols)}")
|
|
110
|
+
return []
|
|
111
|
+
|
|
112
|
+
X = df[numeric_cols].values
|
|
113
|
+
|
|
114
|
+
# Fit UMAP
|
|
115
|
+
print(f"[UMAPPlot] Fitting UMAP with {len(X)} samples")
|
|
116
|
+
reducer = UMAPReducer(n_components=2, random_state=42)
|
|
117
|
+
embedding = reducer.fit_transform(X)
|
|
118
|
+
print(f"[UMAPPlot] UMAP embedding created with shape {embedding.shape}")
|
|
119
|
+
|
|
120
|
+
# Create plot
|
|
121
|
+
fig, ax = plt.subplots(figsize=(8, 6))
|
|
122
|
+
ax.scatter(embedding[:, 0], embedding[:, 1], alpha=0.6, s=20)
|
|
123
|
+
ax.set_xlabel("UMAP 1")
|
|
124
|
+
ax.set_ylabel("UMAP 2")
|
|
125
|
+
ax.set_title("UMAP Plot")
|
|
126
|
+
|
|
127
|
+
# Save plot
|
|
128
|
+
output_file = temp_dir / f"umap_plot.{export_format}"
|
|
129
|
+
print(f"[UMAPPlot] Saving to {output_file}")
|
|
130
|
+
fig.savefig(str(output_file), dpi=150, bbox_inches="tight")
|
|
131
|
+
plt.close(fig)
|
|
132
|
+
print(f"[UMAPPlot] Plot saved successfully")
|
|
133
|
+
|
|
134
|
+
return [output_file]
|
|
135
|
+
|
|
136
|
+
except Exception as e:
|
|
137
|
+
import traceback
|
|
138
|
+
print(f"[UMAPPlot] ERROR generating UMAP plot: {e}")
|
|
139
|
+
print(traceback.format_exc())
|
|
140
|
+
return []
|
senoquant/utils.py
CHANGED
|
@@ -11,7 +11,7 @@ def layer_data_asarray(layer, *, squeeze: bool = True) -> np.ndarray:
|
|
|
11
11
|
Parameters
|
|
12
12
|
----------
|
|
13
13
|
layer : object
|
|
14
|
-
|
|
14
|
+
napari layer instance providing a ``data`` attribute.
|
|
15
15
|
squeeze : bool, optional
|
|
16
16
|
Whether to remove singleton dimensions.
|
|
17
17
|
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: senoquant
|
|
3
|
+
Version: 1.0.0b4
|
|
4
|
+
Summary: napari plugin for spatial quantification of senescence markers in tissue imaging
|
|
5
|
+
Author: SenoQuant Contributors
|
|
6
|
+
Maintainer: SenoQuant Contributors
|
|
7
|
+
License: BSD-3-Clause
|
|
8
|
+
Project-URL: Homepage, https://github.com/HaamsRee/senoquant
|
|
9
|
+
Project-URL: Documentation, https://haamsree.github.io/senoquant/
|
|
10
|
+
Project-URL: Repository, https://github.com/HaamsRee/senoquant
|
|
11
|
+
Project-URL: Bug Tracker, https://github.com/HaamsRee/senoquant/issues
|
|
12
|
+
Keywords: napari,plugin,senescence,quantification,microscopy,image analysis,segmentation,spot detection
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Framework :: napari
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: bioio>=3.2.0
|
|
27
|
+
Requires-Dist: bioio-czi>=2.4.2
|
|
28
|
+
Requires-Dist: bioio-dv>=1.2.0
|
|
29
|
+
Requires-Dist: bioio-imageio>=1.3.0
|
|
30
|
+
Requires-Dist: bioio-lif>=1.4.0
|
|
31
|
+
Requires-Dist: bioio-nd2>=1.6.0
|
|
32
|
+
Requires-Dist: bioio-ome-tiff>=1.4.0
|
|
33
|
+
Requires-Dist: bioio-ome-zarr>=3.2.1
|
|
34
|
+
Requires-Dist: bioio-sldy>=1.4.0
|
|
35
|
+
Requires-Dist: bioio-tifffile>=1.3.0
|
|
36
|
+
Requires-Dist: bioio-tiff-glob>=1.2.0
|
|
37
|
+
Requires-Dist: numpy<=1.26.4,>=1.23
|
|
38
|
+
Requires-Dist: pandas>=2.0
|
|
39
|
+
Requires-Dist: cellpose==4.0.8
|
|
40
|
+
Requires-Dist: onnx>=1.16
|
|
41
|
+
Requires-Dist: onnxruntime>=1.21.0; platform_system == "Darwin"
|
|
42
|
+
Requires-Dist: onnxruntime-gpu>=1.21.0; platform_system != "Darwin"
|
|
43
|
+
Requires-Dist: openpyxl>=3.1
|
|
44
|
+
Requires-Dist: huggingface_hub>=0.23.0
|
|
45
|
+
Requires-Dist: scikit-image<0.25,>=0.22
|
|
46
|
+
Requires-Dist: PyWavelets>=1.5
|
|
47
|
+
Requires-Dist: scipy>=1.8
|
|
48
|
+
Requires-Dist: senoquant-stardist-ext>=0.1.1
|
|
49
|
+
Requires-Dist: dask[array]>=2024.4
|
|
50
|
+
Requires-Dist: dask[distributed]>=2024.4
|
|
51
|
+
Requires-Dist: matplotlib>=3.8
|
|
52
|
+
Requires-Dist: umap-learn>=0.5
|
|
53
|
+
Provides-Extra: all
|
|
54
|
+
Requires-Dist: napari[all]; extra == "all"
|
|
55
|
+
Requires-Dist: bioio>=3.2.0; extra == "all"
|
|
56
|
+
Requires-Dist: bioio-czi>=2.4.2; extra == "all"
|
|
57
|
+
Requires-Dist: bioio-dv>=1.2.0; extra == "all"
|
|
58
|
+
Requires-Dist: bioio-imageio>=1.3.0; extra == "all"
|
|
59
|
+
Requires-Dist: bioio-lif>=1.4.0; extra == "all"
|
|
60
|
+
Requires-Dist: bioio-nd2>=1.6.0; extra == "all"
|
|
61
|
+
Requires-Dist: bioio-ome-tiff>=1.4.0; extra == "all"
|
|
62
|
+
Requires-Dist: bioio-ome-zarr>=3.2.1; extra == "all"
|
|
63
|
+
Requires-Dist: bioio-sldy>=1.4.0; extra == "all"
|
|
64
|
+
Requires-Dist: bioio-tifffile>=1.3.0; extra == "all"
|
|
65
|
+
Requires-Dist: bioio-tiff-glob>=1.2.0; extra == "all"
|
|
66
|
+
Requires-Dist: numpy<=1.26.4,>=1.23; extra == "all"
|
|
67
|
+
Requires-Dist: pandas>=2.0; extra == "all"
|
|
68
|
+
Requires-Dist: cellpose==4.0.8; extra == "all"
|
|
69
|
+
Requires-Dist: onnx>=1.16; extra == "all"
|
|
70
|
+
Requires-Dist: onnxruntime>=1.21.0; platform_system == "Darwin" and extra == "all"
|
|
71
|
+
Requires-Dist: onnxruntime-gpu>=1.21.0; platform_system != "Darwin" and extra == "all"
|
|
72
|
+
Requires-Dist: openpyxl>=3.1; extra == "all"
|
|
73
|
+
Requires-Dist: huggingface_hub>=0.23.0; extra == "all"
|
|
74
|
+
Requires-Dist: scikit-image<0.25,>=0.22; extra == "all"
|
|
75
|
+
Requires-Dist: PyWavelets>=1.5; extra == "all"
|
|
76
|
+
Requires-Dist: scipy>=1.8; extra == "all"
|
|
77
|
+
Requires-Dist: senoquant-stardist-ext>=0.1.1; extra == "all"
|
|
78
|
+
Requires-Dist: dask[array]>=2024.4; extra == "all"
|
|
79
|
+
Requires-Dist: dask[distributed]>=2024.4; extra == "all"
|
|
80
|
+
Requires-Dist: matplotlib>=3.8; extra == "all"
|
|
81
|
+
Requires-Dist: umap-learn>=0.5; extra == "all"
|
|
82
|
+
Dynamic: license-file
|
|
83
|
+
|
|
84
|
+
# SenoQuant
|
|
85
|
+
|
|
86
|
+

|
|
87
|
+
[](https://badge.fury.io/py/senoquant)
|
|
88
|
+
[](https://www.python.org/downloads/)
|
|
89
|
+
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
90
|
+
|
|
91
|
+
SenoQuant is a versatile [napari](https://napari.org/stable/index.html) plugin designed for comprehensive, accurate,
|
|
92
|
+
and unbiased spatial quantification and prediction of senescence markers
|
|
93
|
+
across diverse tissue contexts.
|
|
94
|
+
|
|
95
|
+
## Features
|
|
96
|
+
|
|
97
|
+
- Segment nuclei and cytoplasm with built-in models, including StarDist ONNX, Cellpose SAM, and morphology-based models.
|
|
98
|
+
- Detect punctate spots with a U-FISH-based detector.
|
|
99
|
+
- Quantify marker intensity, morphology, spot counts, and spot colocalization.
|
|
100
|
+
- Run batch workflows across folders, including profile save/load and multi-scene support.
|
|
101
|
+
- Read microscopy formats via BioIO, including OME-TIFF, ND2, LIF, CZI, Zarr, and more.
|
|
102
|
+
- *Upcoming*: Integrate custom models for predicting senescence markers.
|
|
103
|
+
|
|
104
|
+
## Installation
|
|
105
|
+
|
|
106
|
+
### Installer (recommended)
|
|
107
|
+
|
|
108
|
+
#### Windows
|
|
109
|
+
|
|
110
|
+
Download the Windows installer (`.exe`) from the [latest release](https://github.com/HaamsRee/senoquant/releases/latest).
|
|
111
|
+
|
|
112
|
+
#### macOS
|
|
113
|
+
|
|
114
|
+
Download the macOS installer (`.pkg`) from the [latest release](https://github.com/HaamsRee/senoquant/releases/latest).
|
|
115
|
+
|
|
116
|
+
#### Linux
|
|
117
|
+
|
|
118
|
+
Installer support for Linux is under construction.
|
|
119
|
+
|
|
120
|
+
### Manual installation
|
|
121
|
+
|
|
122
|
+
For conda/pip/uv setup, see the [developer installation guide](https://haamsree.github.io/senoquant/developer/installation/).
|
|
123
|
+
|
|
124
|
+
## Quick start
|
|
125
|
+
|
|
126
|
+
Use the documentation workflow for the most up-to-date instructions.
|
|
127
|
+
|
|
128
|
+
- Start with the [installation guide](https://haamsree.github.io/senoquant/user/installation/).
|
|
129
|
+
- Follow the [quick start guide](https://haamsree.github.io/senoquant/user/quickstart/).
|
|
130
|
+
- Then use tab-specific guides for [segmentation](https://haamsree.github.io/senoquant/user/segmentation/), [spots](https://haamsree.github.io/senoquant/user/spots/), [quantification](https://haamsree.github.io/senoquant/user/quantification/), and [batch](https://haamsree.github.io/senoquant/user/batch/).
|
|
131
|
+
|
|
132
|
+
## Documentation
|
|
133
|
+
|
|
134
|
+
Full documentation is available at [https://haamsree.github.io/senoquant/](https://haamsree.github.io/senoquant/).
|
|
135
|
+
|
|
136
|
+
- [Installation guide](https://haamsree.github.io/senoquant/user/installation/).
|
|
137
|
+
- [Quick start tutorial](https://haamsree.github.io/senoquant/user/quickstart/).
|
|
138
|
+
- [Segmentation models](https://haamsree.github.io/senoquant/user/segmentation/).
|
|
139
|
+
- [Spot detection](https://haamsree.github.io/senoquant/user/spots/).
|
|
140
|
+
- [Quantification features](https://haamsree.github.io/senoquant/user/quantification/).
|
|
141
|
+
- [Batch processing](https://haamsree.github.io/senoquant/user/batch/).
|
|
142
|
+
- [API reference](https://haamsree.github.io/senoquant/api/).
|
|
143
|
+
|
|
144
|
+
## Development
|
|
145
|
+
|
|
146
|
+
See the [contributing guide](https://haamsree.github.io/senoquant/developer/contributing/) for development setup instructions.
|
|
147
|
+
|
|
148
|
+
## How to cite
|
|
149
|
+
|
|
150
|
+
If you use SenoQuant in your research, please cite it using the metadata in `CITATION.cff`.
|
|
151
|
+
|
|
152
|
+
On GitHub, open the repository page and click `Cite this repository` in the right sidebar to copy a formatted citation.
|
|
153
|
+
|
|
154
|
+
## Acknowledgements
|
|
155
|
+
|
|
156
|
+
SenoQuant builds on and integrates excellent open-source projects.
|
|
157
|
+
|
|
158
|
+
- [napari](https://napari.org/).
|
|
159
|
+
- [StarDist](https://github.com/stardist/stardist).
|
|
160
|
+
- [Cellpose](https://github.com/MouseLand/cellpose).
|
|
161
|
+
- [U-FISH](https://github.com/UFISH-Team/U-FISH).
|
|
162
|
+
- [BioIO](https://github.com/bioio-devs/bioio).
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
senoquant/__init__.py,sha256=
|
|
2
|
-
senoquant/_reader.py,sha256=
|
|
3
|
-
senoquant/_widget.py,sha256=
|
|
1
|
+
senoquant/__init__.py,sha256=UbZDFUGVkGaxQFqjwIfVZt0x2mckTYJpbFUXQBGg5FA,269
|
|
2
|
+
senoquant/_reader.py,sha256=HVGhwQTuuDbvNM9tEkUpE6js_Lzh7vTHXdYfDCqvvXk,154
|
|
3
|
+
senoquant/_widget.py,sha256=83J186GFmImr_lY3wo3bZKouW_AHR_xannIlJZwtv1M,1233
|
|
4
4
|
senoquant/napari.yaml,sha256=2r1EpZcV1B3mLv0z3FwjS8e1T-yIMzoWvNj2SBqmftI,1664
|
|
5
|
-
senoquant/utils.py,sha256=
|
|
5
|
+
senoquant/utils.py,sha256=XpvJjaoN_9DMD-cxURCStFccBYNccttdJtGnFO6PD2E,641
|
|
6
6
|
senoquant/reader/__init__.py,sha256=3lDuOpQC8TGUdfXdpLrr7MaszOVCqKMYM9YaTdq3DVQ,92
|
|
7
|
-
senoquant/reader/core.py,sha256=
|
|
8
|
-
senoquant/tabs/__init__.py,sha256=
|
|
7
|
+
senoquant/reader/core.py,sha256=GGEU_FVFohhWR0KkbuTl50wdS04WzroBBC67gbwfLtA,15809
|
|
8
|
+
senoquant/tabs/__init__.py,sha256=YvagQQzYgZNMsquHD8gvNwJJv6TfdKoycWORSLOjrLk,448
|
|
9
9
|
senoquant/tabs/batch/__init__.py,sha256=0-xDYyAEEch9Yq7OhGeTkgoXus52Y_SQjqvtIbI-I20,291
|
|
10
|
-
senoquant/tabs/batch/backend.py,sha256=
|
|
10
|
+
senoquant/tabs/batch/backend.py,sha256=0npTLVEHP_ZWrAhCy3vyQiH59j7lwD1KoYLqBZABhwo,26683
|
|
11
11
|
senoquant/tabs/batch/config.py,sha256=w6DR0Nw6BL0hrFacQPIAHb-wCirYnogYJgmAPy2j9zo,8639
|
|
12
|
-
senoquant/tabs/batch/frontend.py,sha256=
|
|
12
|
+
senoquant/tabs/batch/frontend.py,sha256=4nT8_4YrTKIHPL0IfV-RQVMVG8U5FBGZWHFkQ71Dgec,56289
|
|
13
13
|
senoquant/tabs/batch/io.py,sha256=mggktbDDsGr4hQvpu4oj1eJcxG-xiPwfquO7QBesdDk,8382
|
|
14
14
|
senoquant/tabs/batch/layers.py,sha256=JjWS6WVZ3YOd-KZ4AjqstRF0qTPwOxOgGHd5FXrer08,2078
|
|
15
15
|
senoquant/tabs/quantification/__init__.py,sha256=iCqW7cg9QFfUdnYF7JSwOEus_tm66IZXdxSShy7RxwA,34
|
|
16
16
|
senoquant/tabs/quantification/backend.py,sha256=uEHV-JNEXddj5jptKDSrz6Lnt3MIYTzmBu0aV0vjLDY,7337
|
|
17
|
-
senoquant/tabs/quantification/frontend.py,sha256=
|
|
17
|
+
senoquant/tabs/quantification/frontend.py,sha256=veDnWxwyVkXt60fdq85Nrv8XZJTowNxX5mpxaMO8qQA,29068
|
|
18
18
|
senoquant/tabs/quantification/features/__init__.py,sha256=XR8nPIAGuVpDT8bqWH0qaI-GeZGp9JOKUD7F77dOd7s,2076
|
|
19
19
|
senoquant/tabs/quantification/features/base.py,sha256=OIH_qwKYyKbTwXGhjQzgwNzoabMURActvmA-gUEoU_8,4018
|
|
20
20
|
senoquant/tabs/quantification/features/roi.py,sha256=wLvFJJ1a2W5x4BOUDrLvou_rje1KmDzUp5nwQvzooTU,11397
|
|
21
21
|
senoquant/tabs/quantification/features/marker/__init__.py,sha256=8twYCiUtoau-6rfcLCVndyKkaG1i9v9fGo6IfQ_Eyuo,98
|
|
22
22
|
senoquant/tabs/quantification/features/marker/config.py,sha256=H0n4xY8ZFSVDIKmsDnQZr_nW0zPpL4PLyKMCtYOrprE,1793
|
|
23
|
-
senoquant/tabs/quantification/features/marker/dialog.py,sha256=
|
|
24
|
-
senoquant/tabs/quantification/features/marker/export.py,sha256=
|
|
23
|
+
senoquant/tabs/quantification/features/marker/dialog.py,sha256=89q5OjHAPG8wjoPKtdNLuFYRDAzLR1ysGJrxhcAJ7wU,15616
|
|
24
|
+
senoquant/tabs/quantification/features/marker/export.py,sha256=SNChfDTyr3rTwLmEs2sfYkLZ_EbdqTofKgbZeUyhJbI,29874
|
|
25
25
|
senoquant/tabs/quantification/features/marker/feature.py,sha256=cWZqUm_KTR-vdQpVXK5FiHKCdMlSkJJ8IJjV3bhLUpM,3917
|
|
26
26
|
senoquant/tabs/quantification/features/marker/morphology.py,sha256=eIwhZgTIoPXtJOUHLR9GJ4okaSCVBoJ3NFSzTQycZiI,8676
|
|
27
|
-
senoquant/tabs/quantification/features/marker/rows.py,sha256=
|
|
27
|
+
senoquant/tabs/quantification/features/marker/rows.py,sha256=PyvXVRodq3DjPuRj1o4IlqMzZh-N8bRT8Dy_fXiWjJQ,23528
|
|
28
28
|
senoquant/tabs/quantification/features/marker/thresholding.py,sha256=jwyc_G774NgmWXElI29Z8j4cX0A8CPqs4PtsobCHCxc,1213
|
|
29
29
|
senoquant/tabs/quantification/features/spots/__init__.py,sha256=XpfiHRHNCmCeaBWuTZsyy_qybswkYYVS_Y4oY885xe0,95
|
|
30
30
|
senoquant/tabs/quantification/features/spots/config.py,sha256=wLSnDvYFWZRN7_D2ih4aCugSlTtNaC5CW3NzGKYoyCM,1616
|
|
31
|
-
senoquant/tabs/quantification/features/spots/dialog.py,sha256=
|
|
32
|
-
senoquant/tabs/quantification/features/spots/export.py,sha256=
|
|
31
|
+
senoquant/tabs/quantification/features/spots/dialog.py,sha256=SzVR2je0HwrluK3KPOjoy-YBN4t6cevIvdFC8rJpfIg,17025
|
|
32
|
+
senoquant/tabs/quantification/features/spots/export.py,sha256=6f4BJEpTZYfDZlWH8aYhTdOzBYolb3KLc8YF-fj5R6Y,47525
|
|
33
33
|
senoquant/tabs/quantification/features/spots/feature.py,sha256=8Zk-SbJDA-Ge9kx46oEisacVVrCJL3cb7LA_zivqWkw,3896
|
|
34
34
|
senoquant/tabs/quantification/features/spots/morphology.py,sha256=toK9exTD3CDX3vEKFN2CcT14f-03ASTJxSpQv8ZfC1M,8498
|
|
35
35
|
senoquant/tabs/quantification/features/spots/rows.py,sha256=9FPrWmNLN6MPeVKpi3knPakkwJ8kR0b4sW0WIMLgaoM,7291
|
|
36
36
|
senoquant/tabs/segmentation/__init__.py,sha256=YKSbKlgW372MFEA7xxY3_CUUkXfKX6VSwdoHh_btIaU,32
|
|
37
37
|
senoquant/tabs/segmentation/backend.py,sha256=9DCVEUEFG0zdl0c_IXa7vAiwLCZetkfGJVK_zdrXsIQ,4295
|
|
38
|
-
senoquant/tabs/segmentation/frontend.py,sha256=
|
|
38
|
+
senoquant/tabs/segmentation/frontend.py,sha256=8hJeyC9h-sjWso25A5SOIgaut0khXljI1uN2HpFOEq0,37987
|
|
39
39
|
senoquant/tabs/segmentation/models/__init__.py,sha256=0_Jxlyc6wGeOoCPhLxKtcfWa8MqFhFm4-_3ca0zDhME,138
|
|
40
40
|
senoquant/tabs/segmentation/models/base.py,sha256=ND518fqg0XuBNT2AWdlf796LEx8xOX9Jq2Ofcf-MsDY,4335
|
|
41
41
|
senoquant/tabs/segmentation/models/hf.py,sha256=Ns9o3slFSq7Ipyj3u1KrJbJ9zKxykh8A6kjxkzH1A58,1845
|
|
42
42
|
senoquant/tabs/segmentation/models/cpsam/details.json,sha256=A_obIZzrnSLw_JPCPX5wq2ZtqYuo0QE6Ctn_BpgwBC4,1239
|
|
43
|
-
senoquant/tabs/segmentation/models/cpsam/model.py,sha256
|
|
43
|
+
senoquant/tabs/segmentation/models/cpsam/model.py,sha256=-Y4sqVH67LEj0A8C16aeDhj8KU5BUUbb75QYXRRg23I,5175
|
|
44
44
|
senoquant/tabs/segmentation/models/default_2d/details.json,sha256=S5H14Fk2_dmQNI2_TsXyB6j8PxspmjWC7tNh23VnG80,1338
|
|
45
|
-
senoquant/tabs/segmentation/models/default_2d/model.py,sha256=
|
|
45
|
+
senoquant/tabs/segmentation/models/default_2d/model.py,sha256=LzGyo_X3flZHjprHM4i5qkAry-dJJ-OXwD6l8w6az6Q,21647
|
|
46
46
|
senoquant/tabs/segmentation/models/default_3d/details.json,sha256=a-5YI9Po-IYTG9qHylPd4MMm7ydkRZj2s3EV9sxwGLY,1348
|
|
47
|
-
senoquant/tabs/segmentation/models/default_3d/model.py,sha256=
|
|
47
|
+
senoquant/tabs/segmentation/models/default_3d/model.py,sha256=x8zBcoEXXLMMkS2cYGYnZTnl33n9_OjTHJzRJV3aAeM,21758
|
|
48
48
|
senoquant/tabs/segmentation/models/nuclear_dilation/__init__.py,sha256=5rgBUSDK5ZoD6tKVSzF0OUtF2bbBA29HMffJ_CjPJkA,43
|
|
49
49
|
senoquant/tabs/segmentation/models/nuclear_dilation/details.json,sha256=Vx3XY7PvgrM3EMwhRDeFTr9i7GdWohzO2If1eJ-oQoU,510
|
|
50
50
|
senoquant/tabs/segmentation/models/nuclear_dilation/model.py,sha256=onLX1R9U-n0s3Dc64jmBbYBuyTRvems3czclgbqHAP4,3048
|
|
@@ -112,13 +112,14 @@ senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/__init__.py,sh
|
|
|
112
112
|
senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/predict2d.py,sha256=h2eywW4LQZJTaktncG0LOuWr9DdR344O8aOzM6_RTqw,3442
|
|
113
113
|
senoquant/tabs/segmentation/stardist_onnx_utils/_stardist/scripts/predict3d.py,sha256=rpdnoA5XPDjRQ-imu1GO4unbfaO5w8PlFLqd_5lAjvY,3581
|
|
114
114
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/__init__.py,sha256=uyQVHS-vUdONhvI1CDR718AmWPzMXPl9-6F0bL7sFBU,1430
|
|
115
|
+
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/stardist_libs.py,sha256=caM1arDjZE4vfJVp61AkH2vqbrXUHssHHcTcL7eKu1I,5788
|
|
115
116
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/__init__.py,sha256=uimduhVV20E3qfJHjSXZlztQfODxdXm5hO4O7dnbsJc,349
|
|
116
117
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/cli.py,sha256=l4u5YhqO_aYVm-uNxfTUrndhmphBXvPDR7hCxTk2nYE,1356
|
|
117
118
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/convert/core.py,sha256=eRx2psv-jjBa5LThNZgxSEI9UjhRtyyWdxDutg3elQE,9038
|
|
118
119
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/__init__.py,sha256=bYIgnsxd_5Ek9XS5sHWuA5WMIpMpoQshId95FWPUm2I,438
|
|
119
120
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/cli.py,sha256=WlpZOHVqENkpUWMLHnH6AkmW5U6BAOQJaY0Nqlka_tQ,1082
|
|
120
121
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/divisibility.py,sha256=OwOpWxui47XI3J1xZTEJdu6El7qqqMSLDeEdIZTTMds,7212
|
|
121
|
-
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py,sha256=
|
|
122
|
+
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/probe.py,sha256=9iDqCc_XAXXS9LQyT3vucCTB9TjnJcOpMssNKIHUFos,3219
|
|
122
123
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/receptive_field.py,sha256=XfwzLZaKX16Y6ybvUggRpsrXcWdFOHUpORhnD694r7Q,6213
|
|
123
124
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/rf_cli.py,sha256=mZ5TkHSWWEM8WKNQ-I7qVAOmS0mQ81n7CmsjzBejJzY,1325
|
|
124
125
|
senoquant/tabs/segmentation/stardist_onnx_utils/onnx_framework/inspect/valid_sizes.py,sha256=Zec8DPn5EWgXwuiQ0Tw907Y-kxlRCTx5YUgRpbyevGI,7913
|
|
@@ -133,16 +134,38 @@ senoquant/tabs/settings/backend.py,sha256=ZVtmrUYNsox7DiVMlcS666XRyLG7GksgC818oo
|
|
|
133
134
|
senoquant/tabs/settings/frontend.py,sha256=_hTWJHZeEtU6n6qke31R6Es63knKeHhWZYUZj0ep79s,721
|
|
134
135
|
senoquant/tabs/spots/__init__.py,sha256=dYrAIzX3A5w4TOLRRadxL2agOte_Z0ennuEIOCbJD5w,25
|
|
135
136
|
senoquant/tabs/spots/backend.py,sha256=LZdkNzw-bpK0NClbeLttpg4C_8AqnIFg1W4NaxepTSs,4547
|
|
136
|
-
senoquant/tabs/spots/frontend.py,sha256=
|
|
137
|
+
senoquant/tabs/spots/frontend.py,sha256=2uRrhWXT8q_8MySYVDoGQyETq8RDHLua5haCwnXehi4,30262
|
|
137
138
|
senoquant/tabs/spots/models/__init__.py,sha256=OKnBIi-aaBsuXmwQNeg4EKeV66gSscedXyZ1-O3cJhY,123
|
|
138
139
|
senoquant/tabs/spots/models/base.py,sha256=VABmb2E7xvWOW8J60ZZkog0ZEG4XyW96qeXJMZVuKT8,2786
|
|
139
|
-
senoquant/tabs/spots/models/rmp/details.json,sha256=
|
|
140
|
-
senoquant/tabs/spots/models/rmp/model.py,sha256=
|
|
141
|
-
senoquant/tabs/spots/models/
|
|
142
|
-
senoquant/tabs/spots/models/
|
|
143
|
-
senoquant
|
|
144
|
-
senoquant
|
|
145
|
-
senoquant
|
|
146
|
-
senoquant
|
|
147
|
-
senoquant
|
|
148
|
-
senoquant
|
|
140
|
+
senoquant/tabs/spots/models/rmp/details.json,sha256=FIuLJmA0HPvhUkLd04IPY47Hg2duV7dlwpl9BcN4G9w,1128
|
|
141
|
+
senoquant/tabs/spots/models/rmp/model.py,sha256=pdeYaXbQ1lQK1D_ZUhn0Chf9XSDV4dG2Nn4Jht3v3mI,19181
|
|
142
|
+
senoquant/tabs/spots/models/ufish/details.json,sha256=TW1pagjfQI2CYFAIRJ6pB14_bI1nU7EsoW5PLZtMcJg,602
|
|
143
|
+
senoquant/tabs/spots/models/ufish/model.py,sha256=YxCH5k2R3E9gk7H8CAbxrIQ2qa5yPOEYv7uj-hM8N-g,11074
|
|
144
|
+
senoquant/tabs/spots/ufish_utils/__init__.py,sha256=QH8ReVcWtg2_Mgx2Oxg6OZbcQ8ntp42lOMlaJoT3ZSE,394
|
|
145
|
+
senoquant/tabs/spots/ufish_utils/core.py,sha256=agSR6KD7potqvKrUQlcGTcOuhQTykPkTcgwYI6JwHBw,11764
|
|
146
|
+
senoquant/tabs/visualization/__init__.py,sha256=RV8qmD1xqR5i2PlAk_1Dx-6XRig9q7D7H2kwcFPGruc,33
|
|
147
|
+
senoquant/tabs/visualization/backend.py,sha256=z0_mHft-fnzqSE_qv0JTX5UgWhCJ7vf11Cpa210NQDo,10877
|
|
148
|
+
senoquant/tabs/visualization/frontend.py,sha256=E4h7jBmyF7ZBnKUH1Hhvfj9YDzrbnJljp6h1k6PYLRg,42580
|
|
149
|
+
senoquant/tabs/visualization/plots/__init__.py,sha256=fyic7xGD_h4CNoDI9Ui1UrZZwgPwqJPwJ16YFRW6aXE,1965
|
|
150
|
+
senoquant/tabs/visualization/plots/base.py,sha256=hUsX7Oz2TlQb-g3eAKZL82URyoB2pbyQPCPNvGQdCzg,4297
|
|
151
|
+
senoquant/tabs/visualization/plots/double_expression.py,sha256=jcYEDt_taHtm4uSUx7viv3J2BW4MP7cGax33guwo1bc,6637
|
|
152
|
+
senoquant/tabs/visualization/plots/spatialplot.py,sha256=4GR4w8ChBFZ_hsh03_kRo3yKCfkCEbfqIeJvC3IxQ_M,5673
|
|
153
|
+
senoquant/tabs/visualization/plots/umap.py,sha256=fQuwtmsuMyWmUMcmmcuMOVqKrON0aBi-xMQ0W_vxyeA,5134
|
|
154
|
+
senoquant-1.0.0b4.dist-info/licenses/LICENSE,sha256=wJjNEZJA6A7m6ozqNeq3tXi4X5gzbEGraFm2jw5ahG0,1509
|
|
155
|
+
ufish/__init__.py,sha256=ls1camlIoMxEZz9gSkZ1OJo-MXqHWwKPtdPbZJmwp7E,22
|
|
156
|
+
ufish/api.py,sha256=Nezcny6yTGMwdmB8qZv5dyCAeDq1RCSvMcAiZmGcn1s,29658
|
|
157
|
+
ufish/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
|
+
ufish/model/loss.py,sha256=J6Oj2Fg1Zt04NneBhdjTpvb0BBvDc4wWfSsAf5cY8RA,1707
|
|
159
|
+
ufish/model/train.py,sha256=jt4kciKbtnrRyHcu9x8RXvvKk3L01_KA_U7xxgQjZlY,6025
|
|
160
|
+
ufish/model/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
161
|
+
ufish/model/network/spot_learn.py,sha256=yvyqXwqNHuc4bISo812GS7t6oJ_ZKcUuhlmpLYPeRek,1619
|
|
162
|
+
ufish/model/network/ufish_net.py,sha256=ssxuV1qoa7Iod1KiNwQDtnYR41_fOH9cuAroco_sRcw,6424
|
|
163
|
+
ufish/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
164
|
+
ufish/utils/img.py,sha256=8CkEZyWCKriCFuSq_qPphwmj-WPUrFMDyMGnRPQCA3k,12904
|
|
165
|
+
ufish/utils/log.py,sha256=_nF9sJJAMFqQJvvIUYI5o2ffAMTHmQhDVkp2EI3rsvc,280
|
|
166
|
+
ufish/utils/spot_calling.py,sha256=y7lSWOuxG7ca1nFz2uKC7x7aSzocqQu2p3tCijvvLSI,3970
|
|
167
|
+
senoquant-1.0.0b4.dist-info/METADATA,sha256=23gWiyLwY3INGiBy-N5-heQUVt0xirsQPguswkV8XQE,7297
|
|
168
|
+
senoquant-1.0.0b4.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
169
|
+
senoquant-1.0.0b4.dist-info/entry_points.txt,sha256=_HUyyJcDeBQVdUKjY3ZW9fqvHLWFn2mPXS_9KBPIzuU,52
|
|
170
|
+
senoquant-1.0.0b4.dist-info/top_level.txt,sha256=n-FXEO-BsEDOq-ur29UIHcQLD-PgvSbN2eV1onngiSU,16
|
|
171
|
+
senoquant-1.0.0b4.dist-info/RECORD,,
|
ufish/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.1.1'
|