The goal is to investigate the processes of differentiation in motor neurons (MNs) derived from an iPSC model. Gene expression was assayed using single-cell RNA-sequencing (10x Genomics) and processed with CellRanger at each timepoint. Cells were collected from undifferentiated iPSC, and every 3 days until day 50. We aim to identify the regional identity and subtypes of iPSC motor neurons and transcriptomic (dis)similarity with native MNs in the fetal spinal cord.
Scripts in src/ are prefixed <series>_<step>_. The series prefix denotes the dataset/comparison and the step denotes order within that series:
1_- iPSC samples (day 0–day 50 differentiation time course)2_- Human fetal spinal cord (HSC) reference and iPSC↔HSC comparison3_&5_- Muscle-medium / skMCM experiment (iPSC-MN day 24 ± skeletal-muscle-conditioned medium, vs. SkM-untreated co-culture).3_= preprocessing/QC of these samples;5_= label transfer and integration with the Rayon embryonic and HSC references. ("mm_added" and "skMCM" refer to this same experiment.)4_- Integrated analysis of iPSC + HSC + skMCM samples
- Preprocessing (QC, filtering, normalization):
*_00_*.Rmd(e.g.1_00,2_00,3_00,5_00) - Integrated primary spinal-cord reference:
1_01_mack_d_iPSC_motor_neurons_ref_data.Rmd - Integration of samples (scANVI):
*_integration_*SCANVI.py - Cell-type annotation:
*_celltype_annotation.Rmdor*_label_transfer.py - Cell-trajectory analysis:
*_trajectories.py(CellRank 2) - RNA velocity: see
src/velocyto_README.md
Conda/mamba environments are in env/ (versions pinned to those used for the manuscript):
env/scanvi_gpu.yml- GPU scANVI integration + label transfer (*_SCANVI.py,*_label_transfer.py)env/cellrank2.yml- CellRank 2 trajectory analysis (1_07_*,_aggregate_fate_probs.py)env/velocyto.yml- RNA velocity counting
mamba env create -f env/scanvi_gpu.yml
mamba activate scanvi_gpuThe .Rmd notebooks call Python via reticulate using a scanpy_in_r conda env;
adjust the absolute conda-env paths near the top of each .Rmd to your own install.
Run scripts in series/step order. They expect to be launched from the repository
root (paths are written relative to it, e.g. ./results/... or ../results/...).
Python scripts take arguments via argparse - run with -h to see options. GPU jobs
are submitted via SLURM (src/slurm/run_gpu.slurm). Each script's header comment lists
its inputs and outputs.
Raw and processed single-cell data are deposited at [GEO/Zenodo accession - TODO add
before submission]. The data/, results/, and figures/ directories are not
tracked in git; download the deposited data and place it under results/ to reproduce
the downstream steps.
If you use this code, please cite [manuscript citation - TODO add on acceptance].
@yebaeus & @jennylsmith
- Yeji Bae (https://orcid.org/0000-0001-5952-4958)
- Jenny L. Smith (https://orcid.org/0000-0003-0402-2779)