Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 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
Copy link
Collaborator

@niklasmueboe niklasmueboe Dec 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why delaunay: false. I think for this one we won't need a config at all. And delaunay should always be true

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"delaunay":false
}
29 changes: 22 additions & 7 deletions ...ssing/neighbors/delaunay_triangulation.py → ...y_traingulation/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,18 +34,29 @@
# 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
matrix_file = args.matrix
feature_file = args.features
observation_file = args.observations

## Loading delaunay parameters from config_file
if args.config is not None:
config_file = args.config

import json

with open(config_file) as f:
parameters = json.load(f)

delaunay = parameters["delaunay"]


# ... or AnnData if you want
def get_anndata(args):
Expand Down Expand Up @@ -76,12 +88,15 @@ def get_anndata(args):
## Your code goes here
import squidpy as sq

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

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

## 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)
3 changes: 3 additions & 0 deletions preprocessing/neighbors/n_neighbourhood/config/config_1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"n_neighs":6
}
106 changes: 106 additions & 0 deletions preprocessing/neighbors/n_neighbourhood/n_neighbourhood.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/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="Neighbor definition based on numbers of neibourhood (only for generic coordinates)"
)

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("-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

## Loading n_neighs parameter from config_file

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

import json

with open(config) as f:
parameters = json.load(f)

n_neighs = data["n_neighs"]

# ... 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, n_neighs=n_neighs, coord_type="generic")

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

## 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_neighbourhood/n_neighbourhood.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
3 changes: 3 additions & 0 deletions preprocessing/neighbors/n_rings/config/config_1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"n_rings":1
}
108 changes: 108 additions & 0 deletions preprocessing/neighbors/n_rings/n_rings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#!/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="Neighbor definition based on number of rings of neighbors (only for grid coordinates)"
)

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("-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


## Loading delaunay parameters from config_file
if args.config is not None:
config_file = args.config

import json

with open(config_file) as f:
parameters = json.load(f)

n_rings = parameters["n_rings"]


# ... 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,n_rings=n_rings, coord_type="grid")

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

## 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_rings/n_rings.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
3 changes: 3 additions & 0 deletions preprocessing/neighbors/radius/config/config_1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"radius":1
}
Loading