diff --git a/README.md b/README.md index 17f5318..d1648f6 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,10 @@ Crucially, **`DonorData`** ensures that genetic data and single-cell modalities **cellink** offers a streamlined suite of tools for the entire analysis workflow, organized by task: -**Variant preprocessing & QC** -- [Variant preprocessing & annotation](https://cellink-docs.readthedocs.io/en/latest/tutorials/explore_annotations.html): quality control, annotation (VCF export/import), and selection of genetic variants. - **Association testing** -- [Pseudobulk eQTL mapping](https://cellink-docs.readthedocs.io/en/latest/tutorials/pseudobulk_eqtl.html) +- [eQTL analysis with jaxQTL or tensorQTL](https://cellink-docs.readthedocs.io/en/latest/tutorials/pseudobulk_eqtl_jaxqtl_tensorqtl.html) +- [eQTL analysis with SAIGE-QTL](https://cellink-docs.readthedocs.io/en/latest/tutorials/single_cell_eqtl_saigeqtl.html) +- [Naive pseudobulk eQTL mapping](https://cellink-docs.readthedocs.io/en/latest/tutorials/pseudobulk_eqtl.html) - [Rare variant association studies](https://cellink-docs.readthedocs.io/en/latest/tutorials/burden_testing.html) - [Clumping & pruning](https://cellink-docs.readthedocs.io/en/latest/tutorials/clumping_pruning.html) - [Colocalization analysis](https://cellink-docs.readthedocs.io/en/latest/tutorials/colocalization.html) @@ -62,11 +61,10 @@ Crucially, **`DonorData`** ensures that genetic data and single-cell modalities **Deep learning & representation learning** - [LIVI: donor-level representation learning](https://cellink-docs.readthedocs.io/en/latest/tutorials/livi.html) - [Scooby: single-cell-resolution sequence-to-coverage modeling & variant scoring](https://cellink-docs.readthedocs.io/en/latest/tutorials/scooby.html) -- [Built-in dataloaders for deep learning](https://cellink-docs.readthedocs.io/en/latest/tutorials/run_dataloader.html) +- [Built-in dataloaders for deep learning](https://cellink-docs.readthedocs.io/en/latest/tutorials/run_dataloader.html), including Multiple Instance Learning (MIL) over per-donor cell bags -**Interoperability & data integration** -- [eQTL analysis with jaxQTL or tensorQTL](https://cellink-docs.readthedocs.io/en/latest/tutorials/pseudobulk_eqtl_jaxqtl_tensorqtl.html) -- [eQTL analysis with SAIGE-QTL](https://cellink-docs.readthedocs.io/en/latest/tutorials/single_cell_eqtl_saigeqtl.html) +**Other** +- [Variant preprocessing & annotation](https://cellink-docs.readthedocs.io/en/latest/tutorials/explore_annotations.html): quality control, annotation (VCF export/import), and selection of genetic variants. - [Integrating `DonorData` with EHR data](https://cellink-docs.readthedocs.io/en/latest/tutorials/ehrdataset.html) ## Getting Started diff --git a/tests/test_gene_pair_effects.py b/tests/test_gene_pair_effects.py index d492e07..94fda3f 100644 --- a/tests/test_gene_pair_effects.py +++ b/tests/test_gene_pair_effects.py @@ -25,16 +25,16 @@ def test_compare_gene_pair_effects_keeps_only_celltypes_with_both_genes(tmp_path [ (GENE_A, VARIANT, 0.3, 0.05, 1e-8), (GENE_B, VARIANT, -0.25, 0.06, 1e-6), - (GENE_A, "1:200:A:G", 0.1, 0.05, 0.2), # different variant: irrelevant + (GENE_A, "1:200:A:G", 0.1, 0.05, 0.2), ], ) - # only GENE_A has a row at VARIANT here; celltype must be dropped entirely + _write_celltype_parquet(tmp_path, "ukb_european", "T_CD4_naive", [(GENE_A, VARIANT, 0.1, 0.02, 0.01)]) res = compare_gene_pair_effects(tmp_path, VARIANT, GENE_A, GENE_B, cohort="ukb_european") assert list(res["celltype"].unique()) == ["NK_CD16"] - assert list(res["gene"]) == [GENE_A, GENE_B] # gene_a first, then gene_b, per celltype + assert list(res["gene"]) == [GENE_A, GENE_B] assert list(res.columns) == ["gene", "variant_id", "beta", "se", "pval", "celltype"] diff --git a/tests/test_tl_external_dense_trans_scan.py b/tests/test_tl_external_dense_trans_scan.py index 6f07816..6449ad2 100644 --- a/tests/test_tl_external_dense_trans_scan.py +++ b/tests/test_tl_external_dense_trans_scan.py @@ -39,7 +39,7 @@ def test_run_dense_trans_scan_ranks_all_genes(dd, far_variant_id): assert list(df["rank_by_pval"]) == list(range(1, len(df) + 1)) assert df["pval"].is_monotonic_increasing assert {"chrom", "start", "end"}.issubset(df.columns) - # a genuinely unlinked (far-away) variant shouldn't lose any gene to the cis-window filter + assert len(df) == dd.C.n_vars