Source code for stlearn.adds.add_positions

from typing import Optional, Union
from anndata import AnnData
import pandas as pd
from pathlib import Path
import os

[docs]def positions( adata: AnnData, position_filepath: Union[Path, str] = None, scale_filepath: Union[Path, str] = None, quality: str = "low", copy: bool = False, ) -> Optional[AnnData]: """\ Adding spatial information into the Anndata object Parameters ---------- adata Annotated data matrix. position_filepath Path to tissue_positions_list file. scale_filepath Path to scalefactors_json file. quality Choosing low or high resolution image. copy Return a copy instead of writing to adata. Returns ------- Depending on `copy`, returns or updates `adata` with the following fields. **imagecol** and **imagerow** : `adata.obs` field Spatial information of the tissue image. """ tissue_positions = pd.read_csv(position_filepath, header=None) tissue_positions.columns = [ "barcode", "tissue", "row", "col", "imagerow", "imagecol", ] import json with open(scale_filepath) as json_file: scale_factors = json.load(json_file) if quality == "low": tissue_positions["imagerow"] = ( tissue_positions["imagerow"] * scale_factors["tissue_lowres_scalef"] ) tissue_positions["imagecol"] = ( tissue_positions["imagecol"] * scale_factors["tissue_lowres_scalef"] ) elif quality == "high": tissue_positions["imagerow"] = ( tissue_positions["imagerow"] * scale_factors["tissue_hires_scalef"] ) tissue_positions["imagecol"] = ( tissue_positions["imagecol"] * scale_factors["tissue_hires_scalef"] ) tmp = adata.obs.merge( tissue_positions.reset_index().set_index(["barcode"]), left_index=True, right_index=True, how="left", ).reset_index()[["imagerow", "imagecol"]] adata.obs["imagerow"] = tmp["imagerow"].values adata.obs["imagecol"] = tmp["imagecol"].values return adata if copy else None