API Reference
Core model
- smoder.models.deconvolution.selectInfoGenes(Basis, sc_adata, commonGene, ct_select, ct_varname, log_FC=1.25, top_n_filter=False, top_n=200)[source]
选择信息基因的函数(新增top_n筛选选项)
- 参数:
Basis: 基础表达矩阵,行是基因,列是细胞类型 sc_adata: scanpy的AnnData对象 commonGene: 共同基因列表 ct_select: 需要筛选的细胞类型列表 ct_varname: 细胞类型在sc_adata.obs中的列名 log_FC: 原有的log倍变化阈值,默认1.25 top_n_filter: 是否启用top_n筛选模式,默认False(使用原有log_FC筛选) top_n: 每种细胞类型筛选的差异基因数量,默认2000
- 返回:
gene2: 最终筛选出的信息基因列表
- class smoder.models.deconvolution.SpaMultiDecon_two_modals(ref_adata_dict={'modal1': None}, smo_adata_dict={'modal1': None, 'modal2': None}, nn_para_dict={}, modal2_type='adt')[source]
Bases:
object- property weight_loss
- property learning_rate
- property device
- property epochs
- property seed
- property weight_spatial
- property weight_consistency
- property pca_n_components_rna
- property modal2_target_dim
第二模态(ADT/Peak)最终目标维度(仅一个输入参数,统一管控)
- property lsi_random_state
Pipelines
- smoder.pipelines.mousebrain_h3k27ac.train_model(model, params, dim_rna, dim_modal2, base_config)[source]
- smoder.pipelines.mousebrain_h3k27ac.clean_anndata_for_save(adata)[source]
清理AnnData中所有层级的特殊字符,避免h5ad保存报错
Preprocessing
RNA preprocessing
- smoder.preprocessing.rna.filter_out_low_quality_data(adata, data_type='spatial')[source]
Filter low-quality data for spatial or single-cell AnnData objects.
- smoder.preprocessing.rna.process_single_cell(adata, ref_celltype_col='CellType')[source]
单细胞数据初始处理(基础清洗,不含最终过滤步骤) 参数: 数据文件adata 返回: 初始处理后的AnnData对象
- smoder.preprocessing.rna.process_single_cell_path(sc_path)[source]
单细胞数据初始处理(基础清洗,不含最终过滤步骤) 参数: 数据文件路径 返回: 初始处理后的AnnData对象
- smoder.preprocessing.rna.process_spatial_data(adata, common_genes, hvgs)[source]
处理空间转录组数据:筛选基因+归一化+log转换
- smoder.preprocessing.rna.process_spatial_data_path(st_path, common_genes, hvgs)[source]
处理空间转录组数据:筛选基因+归一化+log转换
- smoder.preprocessing.rna.get_spatial_hvgs_only(st_path, common_genes, hvgs)[source]
仅筛选高变基因,不进行其他处理
Second-modality preprocessing
- smoder.preprocessing.modality2.clr_normalization(matrix)[source]
执行中心对数比(CLR)标准化:clr(x) = ln(x_i / 几何均值(x))
- smoder.preprocessing.modality2.process_spatial_adt_data(adata, min_genes=20, min_cells=100)[source]
读取数据→过滤低质量位点和蛋白→CLR标准化→保留空间坐标
- smoder.preprocessing.modality2.process_spatial_adt_data_path(st_adt_path)[source]
通过文件路径读取数据→过滤低质量位点和蛋白→CLR标准化→保留空间坐标
Postprocessing
Reconstruction
Postprocessing utilities for SMODER reconstruction.
This module provides omics_reconstruct for reconstructing selected RNA genes
or second-modality gene and feature signals from trained SMODER embeddings.
The input spatial_path should point to a SMODER result AnnData file that
contains spatial coordinates and encoder representations such as
rna_encoder, peak_encoder, or adt_encoder.
- smoder.postprocessing.reconstruction.set_random_seed(seed: int = 42) None[source]
Set NumPy and PyTorch random seeds.
- smoder.postprocessing.reconstruction.normalize_coords(coords: numpy.ndarray) numpy.ndarray[source]
Min-max normalize spatial coordinates to [0, 1].
- smoder.postprocessing.reconstruction.standardize_embedding(embedding_data: numpy.ndarray, train_size: int) Tuple[torch.Tensor, sklearn.preprocessing.StandardScaler][source]
Z-score standardize embeddings using the training subset only.
- smoder.postprocessing.reconstruction.lognorm_transform(expr_matrix: numpy.ndarray, target_sum: float = 10000.0) numpy.ndarray[source]
Apply total-count normalization followed by log1p transformation.
- smoder.postprocessing.reconstruction.filter_valid_genes(adata: anndata.AnnData, target_genes: Sequence[str] | None) list[str][source]
Return target genes/features that are present in
adata.var_names.
- smoder.postprocessing.reconstruction.load_align_data(expr_path: str, spatial_path: str) Tuple[anndata.AnnData, anndata.AnnData][source]
Load expression and SMODER result AnnData files, then align common spots.
- smoder.postprocessing.reconstruction.project_coords(coords: numpy.ndarray, n_angles: int = 100) torch.Tensor[source]
Project 2D spatial coordinates under multiple rotation angles.
- class smoder.postprocessing.reconstruction.RNAFCModel(*args: Any, **kwargs: Any)[source]
Bases:
ModuleFully connected model for RNA gene reconstruction.
- smoder.postprocessing.reconstruction.rna_run(adata_expr: anndata.AnnData, adata_spatial: anndata.AnnData, target_genes: Sequence[str] | None, hidden_dim: int, n_layers: int, epochs: int, lr: float, patience: int, encoder_key: str = 'rna_encoder', n_angles: int = 100, batch_size: int = 64, print_interval: int = 10, do_lognorm: bool = True, target_sum: float = 10000.0, device: str | None = None, seed: int = 42) anndata.AnnData[source]
Run RNA gene reconstruction.
- smoder.postprocessing.reconstruction.second_modality_preprocess_single(expr: numpy.ndarray, coords: numpy.ndarray, k: int = 8, quantile: float = 0.8, support_thr: float = 0.3) numpy.ndarray[source]
Filter noisy signal using quantile thresholding and neighborhood support.
- smoder.postprocessing.reconstruction.second_modality_preprocess_batch(adata_expr: anndata.AnnData, adata_spatial: anndata.AnnData, target_genes: Sequence[str], k: int = 8, quantile: float = 0.8, support_thr: float = 0.3) anndata.AnnData[source]
Apply neighborhood-aware preprocessing to selected second-modality features.
- class smoder.postprocessing.reconstruction.DenseGCNConv(*args: Any, **kwargs: Any)[source]
Bases:
ModuleDense GCN layer used by second-modality reconstruction.
- class smoder.postprocessing.reconstruction.SecondModalityGCNModel(*args: Any, **kwargs: Any)[source]
Bases:
ModuleGCN model for reconstructing second-modality gene/feature signals.
- smoder.postprocessing.reconstruction.build_spatial_adj(coords: numpy.ndarray, k: int = 12, device: str | None = None) torch.Tensor[source]
Build dense KNN adjacency matrix from spatial coordinates.
- smoder.postprocessing.reconstruction.second_modality_run(adata_expr: anndata.AnnData, adata_spatial: anndata.AnnData, target_genes: Sequence[str] | None, hidden_dim: int, n_layers: int, epochs: int, lr: float, patience: int, encoder_key: str, omics_label: str = 'ATAC', spatial_k: int = 12, do_preprocess: bool = True, pre_k: int = 8, pre_quantile: float = 0.8, pre_support: float = 0.3, do_lognorm: bool = True, target_sum: float = 10000.0, device: str | None = None, seed: int = 42) anndata.AnnData[source]
Run second-modality reconstruction using a GCN model.
- smoder.postprocessing.reconstruction.omics_reconstruct(omics_type: str, expr_path: str, spatial_path: str, target_genes: Sequence[str] | None, hidden_dim: int = 64, n_layers: int = 3, epochs: int = 500, lr: float = 0.0001, patience: int = 30, save_path: str | None = None, encoder_key: str | None = None, device: str | None = None, seed: int = 42, n_angles: int = 100, batch_size: int = 64, print_interval: int = 10, do_lognorm: bool = True, target_sum: float = 10000.0, spatial_k: int = 12, do_preprocess: bool | None = None, pre_k: int = 8, pre_quantile: float = 0.8, pre_support: float = 0.3) anndata.AnnData[source]
Reconstruct selected RNA or second-modality gene/feature signals.
- Parameters:
omics_type – One of
"RNA","ATAC","PEAK","EPIGENOMICS","ADT", or"PROTEIN".expr_path – Path to an AnnData file containing the target expression/signal matrix.
spatial_path – Path to a SMODER result AnnData file containing spatial coordinates and encoder representations.
target_genes – Genes or features to reconstruct. If
None, all features are used.encoder_key – Key in
spatial_path.obsmused as model input. IfNone, a default is selected based onomics_type.save_path – Optional output path for saving the reconstructed AnnData object.
- Returns:
Reconstructed AnnData object.
.Xstores denoised/reconstructed signals,.obsm["spatial"]stores spatial coordinates, and.layers["original_label"]stores the target labels used for fitting.- Return type:
AnnData
Visualization
Spatial visualization
Spatial visualization utilities for SMODER results.
- smoder.visualization.spatial.get_spatial_xy(adata: anndata.AnnData, spatial_key: str = 'spatial', flip_y: bool = True) tuple[numpy.ndarray, numpy.ndarray][source]
Return x and y coordinates from
adata.obsm[spatial_key].
- smoder.visualization.spatial.save_spatial_continuous(adata: anndata.AnnData, values: Sequence[float], out_path: str, title: str = '', spatial_key: str = 'spatial', flip_y: bool = True, point_size: float = 6, cmap: str = 'viridis', vmin: float | None = None, vmax: float | None = None, figsize: tuple[float, float] = (5, 5), dpi: int = 300) None[source]
Save a spatial heatmap for continuous values.
- smoder.visualization.spatial.save_spatial_categorical(adata: anndata.AnnData, labels: Sequence[str], out_path: str, title: str = '', spatial_key: str = 'spatial', flip_y: bool = True, point_size: float = 6, cmap: str = 'tab20', figsize: tuple[float, float] = (6, 5), dpi: int = 300) None[source]
Save a spatial map for categorical labels.
- smoder.visualization.spatial.get_cell_type_proportions(adata: anndata.AnnData, obsm_key: str = 'cell_type_proportions', obs_start_col: int | None = None, cell_type_names: Sequence[str] | None = None) pandas.DataFrame[source]
Extract cell-type proportion matrix from a SMODER result AnnData object.
Priority: 1. use
adata.obsm[obsm_key]if available; 2. otherwise useadata.obs.iloc[:, obs_start_col:].
- smoder.visualization.spatial.plot_cell_type_proportion_panel(adata: anndata.AnnData, out_path: str, obsm_key: str = 'cell_type_proportions', obs_start_col: int | None = None, cell_type_names: Sequence[str] | None = None, selected_cell_types: Sequence[str] | None = None, top_n: int | None = 12, ncols: int = 4, point_size: float = 4, cmap: str = 'viridis', vmin: float | None = None, vmax: float | None = None, title: str = 'Spatial heatmaps of cell-type proportions', spatial_key: str = 'spatial', flip_y: bool = True, dpi: int = 300) pandas.DataFrame[source]
Save a multi-panel figure of selected cell-type proportion heatmaps.
- smoder.visualization.spatial.plot_all_cell_type_proportions(adata: anndata.AnnData, out_path: str, obsm_key: str = 'cell_type_proportions', obs_start_col: int | None = None, cell_type_names: Sequence[str] | None = None, ncols: int = 6, point_size: float = 2, cmap: str = 'viridis', vmin: float = 0, vmax: float = 1, title: str = 'Spatial heatmaps of cell-type proportions', spatial_key: str = 'spatial', flip_y: bool = True, dpi: int = 200) pandas.DataFrame[source]
Save one panel containing all cell-type proportion heatmaps.
- smoder.visualization.spatial.plot_individual_cell_type_heatmaps(adata: anndata.AnnData, out_dir: str, obsm_key: str = 'cell_type_proportions', obs_start_col: int | None = None, cell_type_names: Sequence[str] | None = None, point_size: float = 6, cmap: str = 'viridis', spatial_key: str = 'spatial', flip_y: bool = True, dpi: int = 300) pandas.DataFrame[source]
Save one spatial heatmap for each cell type.
- smoder.visualization.spatial.plot_embedding_spatial_clustering(adata: anndata.AnnData, out_path: str, embedding_key: str = 'embedding', cluster_key: str = 'smoder_cluster', method: str = 'leiden', resolution: float = 0.6, n_neighbors: int = 15, spatial_key: str = 'spatial', flip_y: bool = True, point_size: float = 6, dpi: int = 300) anndata.AnnData[source]
Cluster a learned embedding and save a spatial cluster map.
- smoder.visualization.spatial.plot_reconstruction_heatmaps(recon_adata: anndata.AnnData, out_dir: str, prefix: str, title_prefix: str, spatial_key: str = 'spatial', flip_y: bool = True, point_size: float = 6, cmap: str = 'viridis', dpi: int = 300) None[source]
Save spatial heatmaps for all reconstructed genes/features in recon_adata.