using the neighbour graph we computed a two - dimensional representation of the data using umap and a coarse ( resolution 1 ) and fine ( resolution 80 ) clustering of the unintegrated data using leiden clustering. snapseed is a scalable auto - annotation strategy, which annotate s cells on the basis of a provided hierarchy of cell types and the corresponding cell type markers. it is based on enrichment of marker gene expression in cell clusters ( high - resolution clustering is preferred ), and data integration is not necessarily required. in this study, we used snapseed to obtain initial annotations for label - aware integration. first, we constructed a hierarchy of cell types including progenitor, neuron and non - neural types, each defined by a set of marker genes ( supplementary data 1 ). next, we represented the data by the rss to average expression profiles of cell clusters in the recently published human developing brain cell atlas. we then constructed a knn graph ( k = 30 ) in the rss space and clustered the dataset using the leiden algorithm ( resolution 80 ). for both steps, we used the graphical processing unit ( gpu ) - accelerated rapids implementation that is provided through scanpy. for all cell type marker genes on a given level in the hierarchy, we computed the area under the receiver operating characteristic curve ( auroc ) as well as the detection rate across clusters. for each cell type, a score was computed by multiplying the maximum auroc with the maximum detection rate among its marker genes. each cluster was then assigned to the cell type with the highest score. this procedure was performed recursively for all levels of the hierarchy. the same procedure was carried out using the fine ( resolution 80 ) clustering of the unintegrated data to obtain cell type labels for the unintegrated dataset that were used downstream as a ground - truth input for benchmarking integration methods. this auto - annotation strategy was implemented in the snapseed python package and is available on github ( https: / / github. com / devsystemslab / snapseed ). snapseed is a light - weight package to enable scalable marker - based annotation for atlas - level datasets in which manual annotation is not readily feasible. the package implements three main functions: annotate ( ) for non - hierarchical annotation of a list of cell types with defined marker genes, annotate _ hierarchy ( ) for annotating more complex, manually defined cell type hierarchies and find _ markers ( ) for fast discovery of cluster - specific features. all functions are based on a gpu - accelerated implementation of auroc scores using jax ( https: / / github. com / google / jax ). we performed integration of the organoid datasets for hnoca using the scpoli model from the scarches package. we defined the batch covariate for integration as a concatenation of the dataset identifier ( annotation column ‘ id ’ ), the annotation of biological replicates ( annotation column ‘ bio _ sample ’ ) as well as technical replicates ( annotation column ‘ tech _ sample ’ ). this resulted in 396 individual batches. the batch covariate is represented in the model as a learned vector of size five. we used the top three levels of the rss - based snapseed cell type annotation as the cell type label input for the scpoli prototype loss. we chose the hidden layer size of the one - layer scpoli encoder and decoder as 1, 024, and the latent embedding dimension as ten. we used a value of 100 for the ‘ alpha _ epoch _ anneal ’ parameter. we did not use the unlabelled prototype pretraining. we trained the model for a total of seven epochs, five of which were pretraining epochs. to quantitatively compare the organoid atlas integration results from several tools, we used the gpu - accelerated scib - metrics python package ( v. 0. 3. 3 ) and used the embedding with the highest overall performance for all downstream analyses. we compared the data integration performance across the following latent representations of the data: unintegrated pca, rss integration, scvi ( default parameters except for using two layers, latent space of size 30 and negative binomial likelihood ) integration, scanvi ( default parameters ) integrations using snapseed level 1, 2 or 3 annotation as cell type label input, scpoli ( parameters shown above ) integrations using either snapseed level 1, 2 or 3 annotation or all three annotation levels at once as the cell type label input, scpoli integrations of metacells aggregated with the aggrecell algorithm ( first used as ‘ pseudocell ’ ) using either snapseed level 1 or 3 annotation as the cell type label input to scpoli. we used the following scores for determining integration quality ( each described in ref. ): leiden normalized mutual information score, leiden adjusted rand index, average silhouette width per cell type label, isolated label score ( average silhouette width - scored ) and cell type local inverse simpson ’ s index to quantify conservation of biological variability. to quantify batch - effect removal, we used average silhouette width per batch label, integration local inverse simpson ’ s index, knn batch - effect test score and graph connectivity. integration approaches were then ranked by an aggregate total score of individually normalized ( into the range of ) metrics. before we carried out the benchmarking, we iteratively removed any cells from the dataset that had an identical latent representation to another cell in the dataset until no latent representation contained any more duplicate rows. this procedure removed a total of 3, 293 duplicate cells ( 0. 002 % of the whole dataset ) and was required for the benchmarking algorithm to complete without errors. we used the snapseed level 3 annotation computed on the unintegrated pca embedding as ground - truth cell type labels in the integration. to infer a global ordering of differentiation state, we sought to infer a real - time - informed pseudotime on the basis of neural optimal transport in the scpoli latent space. we first grouped organoid age in days into seven bins ( ( 0, 15 ], ( 15, 30 ], ( 30, 60 ], ( 60, 90 ], ( 90, 120 ], ( 120, 150 ], ( 150, 450 ] ). next, we used moscot to solve a temporal neural problem. to score the marginal distributions on the basis of expected proliferation rates, we obtained proliferation and apoptosis scores for each cell with the method score _ genes _ for _ marginals ( ). marginal weights were then computed with [ 12pt ] $ $ ( 4 ( } - } ) ) $ $ exp ( 4 × ( prolif _ score − apoptosis _ score ) ) source paper: pmc11578878 the optimal transport problem was solved using the following parameters: iterations = 25, 000, compute _ wasserstein _ baseline = false, batch _ size = 1, 024, patience = 100, pretrain = true, train _ size = 1. to compute displacement vectors for each cell in age bin i, we used the subproblem corresponding to the [ i, i + 1 ] transport map, except for the last age bin, where we used the subproblem [ i − 1, i ]. displacement vectors were obtained by subtracting the original cell distribution from the transported distribution. using the velocity kernel from cellrank we computed a transition matrix from displacement vectors and used it as an input for computing diffusion maps. ranks on negative diffusion component 1 were used as a pseudotemporal ordering. the cell ranger - processed scrna - seq data for the primary atlas were obtained from the link provided on its github page ( https: / / storage. googleapis. com / linnarsson - lab - human / human _ dev _ grch38 - 3. 0. 0. h5ad ). for further quality control, cells with fewer than 300 detected genes were filtered out. transcript counts were normalized by the total number of counts for that cell, multiplied by a scaling factor of 10, 000 and subsequently natural - log transformed.