From a89cccecca0e6b255ca10fc440f1b265ab098f0a Mon Sep 17 00:00:00 2001 From: priyanka9991 Date: Tue, 22 Sep 2026 08:41:46 -0700 Subject: [PATCH] update changelog, pyproject.toml and CITATION.cff --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ CITATION.cff | 4 ++-- pyproject.toml | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45e1b2f5..44c67e60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.4] - 2026-09-22 + +### Added +- `simulate_trial_v2()` and `TranscriptomeSimConfig`: transcriptome-scale hierarchical gamma-Poisson simulator calibrated from real single-cell data, superseding the original `SimulationConfig` API +- TNBC (triple-negative breast cancer) dataset support and accompanying tutorial +- Second-order DiD analysis demonstrated in tutorials +- Signal-fraction sensitivity benchmark (gene panel × signal percentage grid) + + +### Fixed +- Double log bug in benchmark orchestrator and permutation modules (`orchestrator.py`, `permutation.py`) +- GSEA ranking coerced to finite, unique values before `gseapy.prerank` — infinite betas from degenerate OLS and duplicate gene symbols caused "float division by zero" across all five AML gene-set libraries +- Cluster-robust fit falls back to non-robust fit when within-arm degrees of freedom are exhausted, fixing silent failure of AML GSEA +- NEBULA runner: filter zero-count cells before computing log library-size offset; set `ncore=1` to prevent PSOCK port conflicts; robust R error capture and crash detection +- COVID loader: CITE-seq antibody-capture features (~49% of aggregate counts) were sitting in the gene matrix, confounding library-size normalisation; split to `obsm["protein"]` +- Melanoma: sample filter silently dropped 19% of QC-passing cells (3,108 of 16,291) and 7 of 32 patients; per-cell annotations now sourced from the published labels; RECIST arm normalised to leading code +- Vaccine and AML loaders: data-integrity fixes from 4-team audit +- Benchmark: signal-count truncation, frozen design leaking into scenarios, split jobs overwriting combined results + +### Improved +- QC: ambient and housekeeping gene classes excluded upstream in all loaders, so GSEA rankings inherit a clean gene set +- Vaccine loader (GSE171964): raw UMI counts now normalized with 10x QC, matching other loaders +- Benchmark simulator calibrated from real TNBC data: within-cell-type coherent, mean-dependent dispersion, arm-stratified bootstrap gate +- 27 mypy type errors fixed across benchmark and dataset modules +- Tutorials re-executed against `v0.3.4` + ## [0.3.3] - 2026-04-05 ### Added diff --git a/CITATION.cff b/CITATION.cff index 6fb099bd..975c0acc 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -12,8 +12,8 @@ authors: - family-names: "Omar" given-names: "Mohamed" title: "sctrial: Participant-Level Differential Analysis for Longitudinal Single-Cell Experiments" -version: 0.3.3 -date-released: 2026-04-05 +version: 0.3.4 +date-released: 2026-09-22 url: "https://github.com/TheOmarLab/sctrial" repository-code: "https://github.com/TheOmarLab/sctrial" license: MIT diff --git a/pyproject.toml b/pyproject.toml index a75b1270..e088c87b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "sctrial" -version = "0.3.3" +version = "0.3.4" description = "Participant-level differential analysis for longitudinal single-cell experiments: DiD, paired comparisons, module scoring, pseudobulk, and power analysis." readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.9"