“…Graph clustering and partitioning cells into distinct compartments Downstream analysis included normalization (scanpy.pp.normalize_total method, target_sum=1e4), log-transformation (scanpy.pp.log1p method, default parameters), cell cycle score (scanpy.tl.score_genes_cell_cycle method, cell cycle genes defined in Tirosh et al, 2016 54 , feature regress out (scanpy.pp.regress_out method, UMI counts, percentage of mitochondrial genes and cell cycle score were considered to be the source of unwanted variability and were regressed), feature scaling (scanpy.pp.scale method, max_value=10, zero_center=False), PCA analysis (scanpy.tl.pca method, svd_solver='arpack'), batch-balanced neighbourhood graph building (scanpy.external.pp.bbknn method, n_pcs=20) 55 , leiden graph-based clustering (scanpy.tl.leiden method, resolution=1.0) 56 , and UMAP visualization (scanpy.tl.umap method) 57 performed using scanpy (version 1.7.1) 52 . Clusters were preliminarily partitioned into 6 compartments, using marker genes found in the literature in combination with differentially expressed genes (scanpy.tl.rank_gene_groups method, method='Wilcoxon test').…”