|
10 | 10 |
|
11 | 11 |
|
12 | 12 |
|
13 | | -def downstream_recipe(grn_adata, config = {'min_cells':1, 'n_neighbors': 30, 'leiden_resolution': 0.1, 'n_components': 100, 'knn_neighbors': 50})-> anndata.AnnData: |
| 13 | +def downstream_recipe(grn_adata, **kwargs) -> sc.AnnData: |
14 | 14 | """ |
15 | | - Minimal downstream processing for GRN object. Runs sc.pca (without scaling), |
16 | | - sc.neighbours, sc.leiden, sc. umap |
17 | | -
|
18 | | - Parameters |
19 | | - ---------- |
20 | | - grn_adata : AnnData |
21 | | - A GRN anndata object to process |
22 | | -
|
23 | | - config: dict |
24 | | - Parameters for the processing |
25 | | -
|
26 | | - Returns |
27 | | - ------- |
28 | | - grn_adata : AnnData |
29 | | - Processed Anndata object |
| 15 | + Runs sc.pca, sc.neighbors, sc.leiden, and sc.umap. |
| 16 | + Parameters are pulled from kwargs, with defaults provided. |
30 | 17 | """ |
| 18 | + # Define defaults and update with any provided kwargs |
| 19 | + config = { |
| 20 | + 'n_neighbors': 30, |
| 21 | + 'leiden_resolution': 0.1, |
| 22 | + 'n_components': 100, |
| 23 | + 'knn_neighbors': 50, |
| 24 | + 'svd_solver': 'randomized' |
| 25 | + } |
| 26 | + config.update(kwargs) |
| 27 | + |
| 28 | + # Use the config values in the scanpy functions |
| 29 | + sc.tl.pca(grn_adata, svd_solver=config['svd_solver'], zero_center=False) |
31 | 30 |
|
32 | | - sc.tl.pca(grn_adata, svd_solver = 'randomized', zero_center = False) |
| 31 | + # Note: sc.pp.neighbors uses n_neighbors. |
| 32 | + # If you specifically want to use your 'knn_neighbors' key: |
33 | 33 | sc.pp.neighbors(grn_adata, n_neighbors=config['knn_neighbors']) |
| 34 | + |
34 | 35 | sc.tl.leiden(grn_adata, resolution=config['leiden_resolution']) |
35 | | - sc.tl.umap(grn_adata, n_components = config['n_components']) |
| 36 | + |
| 37 | + # n_components in UMAP usually refers to the dimensions of the embedding (default 2) |
| 38 | + sc.tl.umap(grn_adata, n_components=config['n_components']) |
36 | 39 |
|
37 | 40 | return grn_adata |
38 | 41 |
|
| 42 | +def process(grn_adata, n_clu=2, key_added='spectral', **kwargs): |
| 43 | + """ |
| 44 | + Wrapper function that passes all extra keyword arguments to downstream_recipe. |
| 45 | + """ |
| 46 | + |
| 47 | + if not scs.issparse(grn_adata.X): |
| 48 | + grn_adata.X[np.isnan(grn_adata.X)] = 0 |
| 49 | + |
| 50 | + # Pass the kwargs directly into the recipe |
| 51 | + grn_adata = downstream_recipe(grn_adata, **kwargs) |
| 52 | + |
| 53 | + # Assuming spectral_clustering is defined elsewhere |
| 54 | + grn_adata = spectral_clustering(grn_adata, n_clu=n_clu, key_added=key_added) |
| 55 | + |
| 56 | + return grn_adata |
| 57 | + |
39 | 58 |
|
40 | 59 | def spectral_clustering(adata, n_clu = 2, key_added = 'spectral'): |
41 | 60 | """ |
@@ -73,32 +92,7 @@ def spectral_clustering(adata, n_clu = 2, key_added = 'spectral'): |
73 | 92 |
|
74 | 93 |
|
75 | 94 |
|
76 | | -def process(grn_adata, n_clu=2, key_added = 'spectral'): |
77 | | - """ |
78 | | - Wrapper function for convenience processing and clustering |
79 | | -
|
80 | | - Parameters |
81 | | - ---------- |
82 | | - grn_adata : AnnData |
83 | | - A GRN anndata object to process |
84 | | -
|
85 | | - n_clu: int |
86 | | - Number of clusters to compute |
87 | | - key_added: str |
88 | | - The key to add the new labelling to [Default: spectral] |
89 | | -
|
90 | | - Returns |
91 | | - ------- |
92 | | - grn_adata : AnnData |
93 | | - Processed Anndata object with an additional column in the .obs |
94 | | - slot of the object named `key_added` |
95 | | - """ |
96 | 95 |
|
97 | | - if not scs.issparse(grn_adata.X): |
98 | | - grn_adata.X[np.isnan(grn_adata.X) ] = 0 |
99 | | - grn_adata = downstream_recipe(grn_adata) |
100 | | - grn_adata = spectral_clustering(grn_adata, n_clu=n_clu, key_added = key_added) |
101 | | - return grn_adata |
102 | 96 |
|
103 | 97 |
|
104 | 98 |
|
|
0 commit comments