[docs]defSME_normalize(adata:AnnData,use_data:str="raw",weights:_WEIGHTING_MATRIX="weights_matrix_all",platform:_PLATFORM="Visium",copy:bool=False,)->AnnData|None:"""\ using spatial location (S), tissue morphological feature (M) and gene expression (E) information to normalize data. Parameters ---------- adata: Annotated data matrix. use_data: Input data, can be `raw` counts or log transformed data weights: Weighting matrix for imputation. if `weights_matrix_all`, matrix combined all information from spatial location (S), tissue morphological feature (M) and gene expression (E) if `weights_matrix_pd_md`, matrix combined information from spatial location (S), tissue morphological feature (M) platform: `Visium` or `Old_ST` copy: Return a copy instead of writing to adata. Returns ------- Anndata """adata=adata.copy()ifcopyelseadataifuse_data=="raw":ifisinstance(adata.X,csr_matrix):count_embed=adata.X.toarray()elifisinstance(adata.X,np.ndarray):count_embed=adata.Xelifisinstance(adata.X,pd.Dataframe):count_embed=adata.X.valueselse:raiseValueError(f"""\{type(adata.X)} is not a valid type. """)else:count_embed=adata.obsm[use_data]calculate_weight_matrix(adata,platform=platform)impute_neighbour(adata,count_embed=count_embed,weights=weights)imputed_data=adata.obsm["imputed_data"].astype(float)imputed_data[imputed_data==0]=np.nanadjusted_count_matrix=np.nanmean(np.array([count_embed,imputed_data]),axis=0)key_added=use_data+"_SME_normalized"adata.obsm[key_added]=adjusted_count_matrixprint("The data adjusted by SME is added to adata.obsm['"+key_added+"']")returnadataifcopyelseNone