Mercurial > repos > goeckslab > scimap_mcmicro_to_anndata
comparison scimap_spatial.py @ 3:8c55377d7f06 draft
planemo upload for repository https://github.com/goeckslab/tools-mti/tree/main/tools/scimap commit 49210b00535415865694ddbec16238d8cf5e6bb0
author | goeckslab |
---|---|
date | Wed, 26 Jun 2024 15:27:13 +0000 |
parents | 8ca435ec19be |
children |
comparison
equal
deleted
inserted
replaced
2:4c767e1a9e7c | 3:8c55377d7f06 |
---|---|
1 import argparse | 1 import argparse |
2 import json | 2 import json |
3 import warnings | 3 import warnings |
4 | 4 |
5 import pandas as pd | |
5 import scimap as sm | 6 import scimap as sm |
6 from anndata import read_h5ad | 7 from anndata import read_h5ad |
7 | 8 |
8 | 9 |
9 def main(inputs, anndata, output): | 10 def main(inputs, anndata, output): |
26 | 27 |
27 tool = params['analyses']['selected_tool'] | 28 tool = params['analyses']['selected_tool'] |
28 tool_func = getattr(sm.tl, tool) | 29 tool_func = getattr(sm.tl, tool) |
29 | 30 |
30 options = params['analyses']['options'] | 31 options = params['analyses']['options'] |
32 | |
33 # tool specific pre-processing | |
31 if tool == 'cluster': | 34 if tool == 'cluster': |
32 options['method'] = params['analyses']['method'] | 35 options['method'] = params['analyses']['method'] |
33 subset_genes = options.pop('subset_genes') | 36 subset_genes = options.pop('subset_genes') |
34 if subset_genes: | 37 if subset_genes: |
35 options['subset_genes'] = \ | 38 options['subset_genes'] = \ |
36 [x.strip() for x in subset_genes.split(',')] | 39 [x.strip() for x in subset_genes.split(',')] |
37 sub_cluster_group = options.pop('sub_cluster_group') | 40 sub_cluster_group = options.pop('sub_cluster_group') |
38 if sub_cluster_group: | 41 if sub_cluster_group: |
39 options['sub_cluster_group'] = \ | 42 options['sub_cluster_group'] = \ |
40 [x.strip() for x in sub_cluster_group.split(',')] | 43 [x.strip() for x in sub_cluster_group.split(',')] |
44 elif tool == 'spatial_lda': | |
45 max_weight_assignment = options.pop('max_weight_assignment') | |
41 | 46 |
42 for k, v in options.items(): | 47 for k, v in options.items(): |
43 if v == '': | 48 if v == '': |
44 options[k] = None | 49 options[k] = None |
45 | 50 |
51 # tool execution | |
46 tool_func(adata, **options) | 52 tool_func(adata, **options) |
47 | 53 |
54 # spatial LDA post-processing | |
48 if tool == 'spatial_lda': | 55 if tool == 'spatial_lda': |
49 adata.uns.pop('spatial_lda_model') | 56 |
57 if max_weight_assignment: | |
58 # assign cell to a motif based on maximum weight | |
59 adata.uns['spatial_lda']['neighborhood_motif'] = \ | |
60 adata.uns['spatial_lda'].idxmax(axis=1) | |
61 | |
62 # merge motif assignment into adata.obs | |
63 adata.obs = pd.merge( | |
64 adata.obs, | |
65 adata.uns['spatial_lda']['neighborhood_motif'], | |
66 left_index=True, | |
67 right_index=True | |
68 ) | |
69 | |
70 # write out LDA results as tabular files | |
71 # so they're accessible to Galaxy users | |
72 adata.uns['spatial_lda'].reset_index().to_csv( | |
73 'lda_weights.txt', sep='\t', index=False) | |
74 adata.uns['spatial_lda_probability'].T.reset_index( | |
75 names='motif').to_csv( | |
76 'lda_probabilities.txt', sep='\t', index=False) | |
77 | |
78 if 'spatial_lda_model' in adata.uns: | |
79 adata.uns.pop('spatial_lda_model') | |
50 | 80 |
51 adata.write(output) | 81 adata.write(output) |
52 | 82 |
53 | 83 |
54 if __name__ == '__main__': | 84 if __name__ == '__main__': |