Skip to content

Commit 962143a

Browse files
committed
Merge branch 'main' into update_n_inconsistent_peak
2 parents 96d688b + 971a82a commit 962143a

5 files changed

Lines changed: 379 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464

6565
* Added Seurat rPCA (PR #95).
6666

67+
* Added processing scripts for CLL dataset (PR #106).
6768

6869
## MAJOR CHANGES
6970

@@ -165,4 +166,4 @@
165166

166167
* Fix bug in EMD vertical where sample combination was malformed (PR #113)
167168

168-
169+
* Fix lisi inconsistent naming (PR #117) for issue #116.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
3+
# get the root of the directory
4+
REPO_ROOT=$(git rev-parse --show-toplevel)
5+
6+
# ensure that the command below is run from the root of the repository
7+
cd "$REPO_ROOT"
8+
9+
set -e
10+
11+
RAW_DIR=resources_raw/human_cll_mass_cytometry/
12+
DATASET_ID=human_cll_mass_cytometry
13+
OUTPUT_DIR=resources/datasets_raw/$DATASET_ID/
14+
15+
mkdir -p $OUTPUT_DIR
16+
17+
# create raw dataset files
18+
python << HERE
19+
import anndata as ad
20+
21+
adata = ad.read_h5ad("$RAW_DIR/human_cll_mass_cytometry.h5ad")
22+
23+
# make sure the output is compressed
24+
adata.write_h5ad("$OUTPUT_DIR/common_dataset.h5ad", compression='gzip')
25+
HERE
26+
27+
cat > $OUTPUT_DIR/state.yaml << HERE
28+
id: $DATASET_ID
29+
output_dataset: !file common_dataset.h5ad
30+
HERE
31+
32+
# only run this if you have access to the openproblems-data bucket
33+
aws s3 sync --profile op \
34+
resources/datasets_raw/human_cll_mass_cytometry \
35+
s3://openproblems-data/resources/task_cyto_batch_integration/datasets_raw/human_cll_mass_cytometry/ \
36+
--delete --dryrun

src/metrics/lisi/config.vsh.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ __merge__: ../../api/comp_metric.yaml
99
# Can contain only lowercase letters or underscores.
1010
name: lisi
1111

12-
13-
1412
# Metadata for your component
1513
info:
1614
metrics:

src/metrics/lisi/script.py

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1+
import sys
2+
13
import anndata as ad
2-
import scib_metrics as sm
34
import numpy as np
4-
import sys
5+
import scib_metrics as sm
56

67
## VIASH START
78
# Note: this section is auto-generated by viash at runtime. To edit it, make changes
89
# in config.vsh.yaml and then run `viash config inject config.vsh.yaml`.
910
par = {
10-
'input_unintegrated': 'resources_test/.../unintegrated.h5ad',
11-
'input_integrated_split1': 'resources_test/.../integrated_split1.h5ad',
12-
'input_integrated_split2': 'resources_test/.../integrated_split2.h5ad',
13-
'output': 'output.h5ad'
14-
}
15-
meta = {
16-
'name': 'lisi'
11+
"input_unintegrated": "resources_test/.../unintegrated.h5ad",
12+
"input_integrated_split1": "resources_test/.../integrated_split1.h5ad",
13+
"input_integrated_split2": "resources_test/.../integrated_split2.h5ad",
14+
"output": "output.h5ad",
1715
}
16+
meta = {"name": "lisi"}
1817
## VIASH END
1918

2019
sys.path.append(meta["resources_dir"])
@@ -23,10 +22,10 @@
2322
subset_markers_tocorrect,
2423
)
2524

26-
print('Reading input files', flush=True)
27-
input_unintegrated = ad.read_h5ad(par['input_unintegrated'])
28-
input_integrated_split1 = ad.read_h5ad(par['input_integrated_split1'])
29-
input_integrated_split2 = ad.read_h5ad(par['input_integrated_split2'])
25+
print("Reading input files", flush=True)
26+
input_unintegrated = ad.read_h5ad(par["input_unintegrated"])
27+
input_integrated_split1 = ad.read_h5ad(par["input_integrated_split1"])
28+
input_integrated_split2 = ad.read_h5ad(par["input_integrated_split2"])
3029

3130
print("Formatting input files", flush=True)
3231
integrated_s1, integrated_s2 = get_obs_var_for_integrated(
@@ -35,12 +34,14 @@
3534
integrated_s1 = subset_markers_tocorrect(integrated_s1)
3635
integrated_s2 = subset_markers_tocorrect(integrated_s2)
3736

38-
print('Compute metrics', flush=True)
37+
print("Compute metrics", flush=True)
3938
n_batches = len(integrated_s1.obs.batch.unique())
4039
n_celltypes = len(integrated_s1.obs.cell_type.unique())
4140

4241
print("Compute iLisi and cLisi for split 1", flush=True)
43-
knn = sm.nearest_neighbors.pynndescent(integrated_s1.layers['integrated'], n_neighbors=100, random_state=0)
42+
knn = sm.nearest_neighbors.pynndescent(
43+
integrated_s1.layers["integrated"], n_neighbors=100, random_state=0
44+
)
4445

4546
ilisi_s1_per_cell = sm.lisi_knn(knn, integrated_s1.obs.batch)
4647
ilisi_s1 = (np.nanmedian(ilisi_s1_per_cell) - 1) / (n_batches - 1)
@@ -49,7 +50,9 @@
4950
clisi_s1 = (n_celltypes - np.nanmedian(clisi_s1_per_cell)) / (n_celltypes - 1)
5051

5152
print("Compute iLisi and cLisi for split 2", flush=True)
52-
knn = sm.nearest_neighbors.pynndescent(integrated_s2.layers['integrated'], n_neighbors=100, random_state=0)
53+
knn = sm.nearest_neighbors.pynndescent(
54+
integrated_s2.layers["integrated"], n_neighbors=100, random_state=0
55+
)
5356
ilisi_s2_per_cell = sm.lisi_knn(knn, integrated_s2.obs.batch)
5457
ilisi_s2 = (np.nanmedian(ilisi_s2_per_cell) - 1) / (n_batches - 1)
5558

@@ -58,21 +61,20 @@
5861

5962
ilisi = np.mean([ilisi_s1, ilisi_s2])
6063
clisi = np.mean([clisi_s1, clisi_s2])
61-
uns_metric_ids = [ 'ilisi', 'clisi' ]
62-
uns_metric_values = [ ilisi, clisi ]
64+
uns_metric_ids = ["iLisi", "cLisi"]
65+
uns_metric_values = [ilisi, clisi]
6366

6467
print("Write output AnnData to file", flush=True)
6568
output = ad.AnnData(
66-
uns={
69+
uns={
6770
"dataset_id": integrated_s1.uns["dataset_id"],
6871
"method_id": integrated_s1.uns["method_id"],
6972
"metric_ids": uns_metric_ids,
7073
"metric_values": uns_metric_values,
7174
"ilisi_s1_index": ilisi_s1_per_cell,
7275
"ilisi_s2_index": ilisi_s2_per_cell,
7376
"clisi_s1_index": clisi_s1_per_cell,
74-
"clisi_s2_index": clisi_s2_per_cell
77+
"clisi_s2_index": clisi_s2_per_cell,
7578
}
76-
7779
)
78-
output.write_h5ad(par['output'], compression='gzip')
80+
output.write_h5ad(par["output"], compression="gzip")

0 commit comments

Comments
 (0)