Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions preprocessing/neighbors/coord_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#!/usr/bin/env python

# Author_and_contribution: Niklas Mueller-Boetticher; created script,
# Author_and_contribution: Qirong Mao; implemented method

import argparse

# TODO adjust description
parser = argparse.ArgumentParser(
description="Constructing spatial neighborhood with custom parameters"
)

parser.add_argument(
"-c", "--coordinates", help="Path to coordinates (as tsv).", required=True
)

parser.add_argument(
"-m", "--matrix", help="Path to (transformed) counts (as mtx).", required=True
)

parser.add_argument(
"-f", "--features", help="Path to features (as tsv).", required=True
)

parser.add_argument(
"-o", "--observations", help="Path to observations (as tsv).", required=True
)

parser.add_argument(
"--coord_type", default=None, choices=['grid', 'generic', None],help="Type of coordinate system.", required=False
)

parser.add_argument("-d", "--out_dir", help="Output directory.", required=True)

parser.add_argument(
"--config",
help="Optional config file (json) used to pass additional parameters.",
required=False,
)

args = parser.parse_args()

# Output files
from pathlib import Path

out_dir = Path(args.out_dir)

spatial_connectivities_file = out_dir / "spatial_connectivities.mtx"
spatial_distances_file = out_dir / "spatial_distances.mtx"

# Use these filepaths and inputs ...
coord_file = args.coordinates
matrix_file = args.matrix
feature_file = args.features
observation_file = args.observations

## Custom parameters
coord_type = args.coord_type


if args.config is not None:
config_file = args.config


# ... or AnnData if you want
def get_anndata(args):
# Untested template
import anndata as ad
import pandas as pd
import scipy as sp

X = sp.io.mmread(args.matrix)
if sp.sparse.issparse(X):
X = X.tocsr()
observations = pd.read_table(args.observations, index_col=0)
features = pd.read_table(args.features, index_col=0)
coordinates = (
pd.read_table(args.coordinates, index_col=0)
.loc[observations.index, :]
.to_numpy()
)

adata = ad.AnnData(
X=X, obs=observations, var=features, obsm={"spatial": coordinates}
)

return adata


adata = get_anndata(args)

## Your code goes here
import squidpy as sq

sq.gr.spatial_neighbors(adata, coord_type=coord_type)

neighbors = adata.obsp["spatial_connectivities"].astype(int)
distance = adata.obsp["spatial_distances"].astype(int)

## Write output
import scipy as sp

out_dir.mkdir(parents=True, exist_ok=True)

sp.io.mmwrite(spatial_connectivities_file, neighbors)
sp.io.mmwrite(spatial_distances_file, distance)

7 changes: 7 additions & 0 deletions preprocessing/neighbors/delaunay_traingulation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
channels:
- conda-forge
dependencies:
- python=3.9.18
- pip
- pip:
- squidpy==1.3.1
19 changes: 13 additions & 6 deletions preprocessing/neighbors/delaunay_triangulation.py
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python

# Author_and_contribution: Niklas Mueller-Boetticher; created script
# Author_and_contribution: Qirong Mao; modifying output file format

import argparse

Expand All @@ -21,7 +22,7 @@
parser.add_argument(
"-o", "--observations", help="Path to observations (as tsv).", required=True
)
parser.add_argument("-d", "--out_file", help="Output file.", required=True)
parser.add_argument("-d", "--out_dir", help="Output directory.", required=True)
parser.add_argument(
"--config",
help="Optional config file (json) used to pass additional parameters.",
Expand All @@ -33,8 +34,10 @@
# Output files
from pathlib import Path

neighbor_file = Path(args.out_file)
# if additional output files are required write it also to out_dir
out_dir = Path(args.out_dir)

spatial_connectivities_file = out_dir / "spatial_connectivities.mtx"
spatial_distances_file = out_dir / "spatial_distances.mtx"

# Use these filepaths and inputs ...
coord_file = args.coordinates
Expand Down Expand Up @@ -77,11 +80,15 @@ def get_anndata(args):
import squidpy as sq

sq.gr.spatial_neighbors(adata, delaunay=True, coord_type="generic")
neighbors = adata.obsp["spatial_connectivities"].astype(int)

neighbors = adata.obsp["spatial_connectivities"].astype(int)
distance = adata.obsp["spatial_distances"].astype(int)

## Write output
import scipy as sp

neighbor_file.parent.mkdir(parents=True, exist_ok=True)
sp.io.mmwrite(neighbor_file, neighbors)
out_dir.mkdir(parents=True, exist_ok=True)

sp.io.mmwrite(spatial_connectivities_file, neighbors)
sp.io.mmwrite(spatial_distances_file, distance)

111 changes: 111 additions & 0 deletions preprocessing/neighbors/n_neighs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#!/usr/bin/env python

# Author_and_contribution: Niklas Mueller-Boetticher; created script,
# Author_and_contribution: Qirong Mao; implemented method

import argparse

# TODO adjust description
parser = argparse.ArgumentParser(
description="Constructing spatial neighborhood with custom parameters"
)

parser.add_argument(
"-c", "--coordinates", help="Path to coordinates (as tsv).", required=True
)

parser.add_argument(
"-m", "--matrix", help="Path to (transformed) counts (as mtx).", required=True
)

parser.add_argument(
"-f", "--features", help="Path to features (as tsv).", required=True
)

parser.add_argument(
"-o", "--observations", help="Path to observations (as tsv).", required=True
)

parser.add_argument(
"--coord_type", default=None, choices=['grid', 'generic', None],help="Type of coordinate system.", required=False
)

parser.add_argument(
"--n_neighs", type=int, default=6,help="Number of neighboring tiles (grid data) or neighborhoods (non-grid data)", required=False
)

parser.add_argument("-d", "--out_dir", help="Output directory.", required=True)

parser.add_argument(
"--config",
help="Optional config file (json) used to pass additional parameters.",
required=False,
)

args = parser.parse_args()

# Output files
from pathlib import Path

out_dir = Path(args.out_dir)

spatial_connectivities_file = out_dir / "spatial_connectivities.mtx"
spatial_distances_file = out_dir / "spatial_distances.mtx"

# Use these filepaths and inputs ...
coord_file = args.coordinates
matrix_file = args.matrix
feature_file = args.features
observation_file = args.observations

## Custom parameters
coord_type = args.coord_type
n_neighs= args.n_neighs

if args.config is not None:
config_file = args.config


# ... or AnnData if you want
def get_anndata(args):
# Untested template
import anndata as ad
import pandas as pd
import scipy as sp

X = sp.io.mmread(args.matrix)
if sp.sparse.issparse(X):
X = X.tocsr()
observations = pd.read_table(args.observations, index_col=0)
features = pd.read_table(args.features, index_col=0)
coordinates = (
pd.read_table(args.coordinates, index_col=0)
.loc[observations.index, :]
.to_numpy()
)

adata = ad.AnnData(
X=X, obs=observations, var=features, obsm={"spatial": coordinates}
)

return adata


adata = get_anndata(args)

## Your code goes here
import squidpy as sq

sq.gr.spatial_neighbors(adata, coord_type=coord_type, n_neighs=n_neighs)

neighbors = adata.obsp["spatial_connectivities"].astype(int)
distance = adata.obsp["spatial_distances"].astype(int)

## Write output
import scipy as sp

out_dir.mkdir(parents=True, exist_ok=True)

sp.io.mmwrite(spatial_connectivities_file, neighbors)
sp.io.mmwrite(spatial_distances_file, distance)

7 changes: 7 additions & 0 deletions preprocessing/neighbors/n_neighs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
channels:
- conda-forge
dependencies:
- python=3.9.18
- pip
- pip:
- squidpy==1.3.1
110 changes: 110 additions & 0 deletions preprocessing/neighbors/n_rings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/usr/bin/env python

# Author_and_contribution: Niklas Mueller-Boetticher; created script,
# Author_and_contribution: Qirong Mao; implemented method

### Only used when coord_type = 'grid'


import argparse

# TODO adjust description
parser = argparse.ArgumentParser(
description="Constructing spatial neighborhood with custom parameters"
)

parser.add_argument(
"-c", "--coordinates", help="Path to coordinates (as tsv).", required=True
)

parser.add_argument(
"-m", "--matrix", help="Path to (transformed) counts (as mtx).", required=True
)

parser.add_argument(
"-f", "--features", help="Path to features (as tsv).", required=True
)

parser.add_argument(
"-o", "--observations", help="Path to observations (as tsv).", required=True
)


parser.add_argument(
"--n_rings", type=int,default=1,help="Number of rings of neighbors for grid data. Only used when coord_type = 'grid'", required=False
)

parser.add_argument("-d", "--out_dir", help="Output directory.", required=True)

parser.add_argument(
"--config",
help="Optional config file (json) used to pass additional parameters.",
required=False,
)

args = parser.parse_args()

# Output files
from pathlib import Path

out_dir = Path(args.out_dir)

spatial_connectivities_file = out_dir / "spatial_connectivities.mtx"
spatial_distances_file = out_dir / "spatial_distances.mtx"

# Use these filepaths and inputs ...
coord_file = args.coordinates
matrix_file = args.matrix
feature_file = args.features
observation_file = args.observations

## Custom parameters
n_rings = args.n_rings

if args.config is not None:
config_file = args.config


# ... or AnnData if you want
def get_anndata(args):
# Untested template
import anndata as ad
import pandas as pd
import scipy as sp

X = sp.io.mmread(args.matrix)
if sp.sparse.issparse(X):
X = X.tocsr()
observations = pd.read_table(args.observations, index_col=0)
features = pd.read_table(args.features, index_col=0)
coordinates = (
pd.read_table(args.coordinates, index_col=0)
.loc[observations.index, :]
.to_numpy()
)

adata = ad.AnnData(
X=X, obs=observations, var=features, obsm={"spatial": coordinates}
)

return adata


adata = get_anndata(args)

## Your code goes here
import squidpy as sq

sq.gr.spatial_neighbors(adata, coord_type="grid",n_rings=n_rings)

neighbors = adata.obsp["spatial_connectivities"].astype(int)
distance = adata.obsp["spatial_distances"].astype(int)

## Write output
import scipy as sp

out_dir.mkdir(parents=True, exist_ok=True)

sp.io.mmwrite(spatial_connectivities_file, neighbors)
sp.io.mmwrite(spatial_distances_file, distance)

Loading