Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

CyteBase case study: COVID-19 blood

This page follows one research question from start to finish, using a published dataset from CyteBase:

How does the peripheral blood of COVID-19 patients differ from that of healthy donors?

It finds a disease-versus-control dataset in the catalog, opens it remotely, and answers the question with cell metadata and about two dozen genes. The H5AD is never downloaded: CyteArc reads metadata and the needed count blocks over the network. Explore CyteBase introduces the catalog and the SDK calls used here.

The saved results on this page were built with the CyteBase October 2026 release (2610), published in the public Nygen/cytebase-2610 bucket, which readers can access without credentials.

Use the page download menu to save the source notebook.

Install CyteArc’s SDK and required dependencies in your notebook environment:

# Install the CyteBase connector and a notebook environment.
uv pip install --prerelease allow 'cytearc[cytebase]' jupyterlab

Explore CyteBase describes bucket selection and credentials for private buckets.

Dataset

The dataset is Wilk et al. (2020), Nature Medicine, Wilk et al. (2020): Seq-Well profiling of peripheral blood mononuclear cells (PBMCs) from patients hospitalized with COVID-19 and from healthy donors. It was curated and distributed by CZ CELLxGENE Discover (CZI Cell Science Program et al., Nucleic Acids Research 2025, Abdulla et al. (2024)). Cite both the original study and CELLxGENE Discover when you use these data. All cell-type labels below are the published annotations; this page does not re-cluster or re-annotate.

The setup cell switches off CyteArc’s progress bars and logs only warnings, to keep the output readable. It also silences huggingface_hub retry messages, which can include full request URLs.

Started: 2026-10-12T13:56:00.408554Z | Wall time: 3.753 s

Find the dataset and open it remotely

Catalog() keeps a small, checksum-verified DuckDB copy of the catalog on your machine; searching it does not touch any count data. Search by author and topic rather than typing an ID by hand.

Loading...
Loading...

Started: 2026-10-12T13:56:04.163839Z | Wall time: 6.605 s

entry is a catalog record: title, citation, CELLxGENE links, size, and ontology labels. Displaying it reads the catalog and the dataset’s build record, not the Zarr store.

open_datastore validates the published build and returns a read-only DataStore. Only small metadata files are fetched now; counts stay in the bucket until a gene is requested. The CELLxGENE UMAP was imported with the data, so it can be plotted directly instead of recomputing an embedding.

DataStore has 44721 (44721) cells with 1 assays: RNA
   Cell metadata:
            'I', 'ids', 'names', 'Admission', 'DPS', 
            'DTF', 'HLA1', 'IFN1', 'RNA_nCounts', 'RNA_nFeatures', 
            'RNA_percentMito', 'RNA_percentRibo', 'Ventilated', 'assay', 'assay_ontology_term_id', 
            'cell.type.coarse', 'cell.type.fine', 'cell_type', 'cell_type_ontology_term_id', 'development_stage', 
            'development_stage_ontology_term_id', 'disease', 'disease_ontology_term_id', 'donor_id', 'is_primary_data', 
            'nCount_RNA', 'nCount_SCT', 'nFeature_RNA', 'nFeature_SCT', 'observation_joinid', 
            'percent.mt', 'percent.rpl', 'percent.rps', 'percent.rrna', 'self_reported_ethnicity', 
            'self_reported_ethnicity_ontology_term_id', 'seurat_clusters', 'sex', 'sex_ontology_term_id', 'singler', 
            'suspension_type', 'tissue', 'tissue_ontology_term_id', 'tissue_type'
   RNA assay has 24505 features and following metadata:
            'I', 'ids', 'names', 'dropOuts', 'feature_biotype', 
            'feature_length', 'feature_reference', 'feature_type', 'nCells'

Imported embeddings: ['X_umap']

Started: 2026-10-12T13:56:10.770728Z | Wall time: 26.819 s

Study design from metadata alone

Besides the standard CELLxGENE fields (cell_type, disease, donor_id, and so on), the store keeps the study’s own columns: Ventilated and Admission (clinical status), DPS (days post symptom onset, 0 for healthy donors), the authors’ coarse and fine labels (cell.type.coarse, cell.type.fine), and per-cell scores such as IFN1.

Read only the columns needed into pandas. This reads cell metadata, not the expression matrix. Then summarize one row per donor.

44,721 cells, 10 metadata columns read

Started: 2026-10-12T13:56:37.591507Z | Wall time: 13.035 s

Summarize clinical metadata once per donor.

diseaseventilatedadmissiondays_post_symptomssexagecells
donor_id
C1COVID-19NonVent / VentICU9 / 11maleseventh decade stage8362
C2COVID-19NonVentICU16malefifth decade stage1735
C3COVID-19VentICU9malefourth decade stage6545
C4COVID-19VentICU9malefourth decade stage3688
C5COVID-19NonVentICU15malesixth decade stage2507
C6COVID-19VentICU2male80 year-old and over stage1893
C7COVID-19NonVentFloor12malethird decade stage3364
H1normalHealthyN/A0female49-year-old stage2100
H2normalHealthyN/A0male49-year-old stage1941
H3normalHealthyN/A0female36-year-old stage2306
H4normalHealthyN/A0male49-year-old stage5136
H5normalHealthyN/A0male48-year-old stage3146
H6normalHealthyN/A0male37-year-old stage1998

Started: 2026-10-12T13:56:50.628400Z | Wall time: 0.032 s

The design is small: 7 COVID-19 patients (C1 to C7) and 6 healthy donors (H1 to H6), mostly male. Six patients were in intensive care and one (C7) on a general ward. C1 contributes two samples: day 9 (not ventilated) and day 11 (ventilated). The donor, not the cell, is the biological replicate, which matters for every comparison below.

Cell counts per donor range from about 1,700 to 8,400. The CELLxGENE cell_type column uses Cell Ontology names; the authors’ cell.type.coarse column groups them into 13 shorter labels, which the compact figures use. Each ontology label maps to exactly one coarse label:

diseasecoarse labelCOVID-19normal
cell_type
B cellB17151966
class switched memory B cellB131328
CD14-positive monocyteCD14 Monocyte82852054
monocyteCD16 Monocyte433915
CD4-positive, alpha-beta memory T cellCD4 T28901208
naive T cellCD4 T22241616
CD4-positive, alpha-beta T cellCD4 T44811
CD8-positive, alpha-beta memory T cellCD8 T33122753
effector CD8-positive, alpha-beta T cellCD8 T565132
conventional dendritic cellDC252204
granulocyteGranulocyte420110
neutrophilGranulocyte25051
natural killer cellNK21504707
IgG plasmablastPB108720
IgA plasmablastPB89066
plateletPlatelet46463
erythrocyteRBC1259178
gamma-delta T cellgd T45403
plasmacytoid dendritic cellpDC92142

Started: 2026-10-12T13:56:50.661914Z | Wall time: 0.029 s

Raw cell counts already hint at differences (for example, many more plasmablasts from COVID-19 samples), but they mix biology with how many cells each donor contributed. The “Composition per donor” section returns to this with per-donor proportions.

The published UMAP

ds.plots.embedding(layout=umap_ref, ...) draws the imported CELLxGENE coordinates. First, the full Cell Ontology annotation:

Imported blood-cell UMAP colored by published Cell Ontology labels, including lymphocytes, monocytes, dendritic cells, plasmablasts, erythrocytes, and platelets.

Started: 2026-10-12T13:56:50.692116Z | Wall time: 13.504 s

Splitting the same layout by condition with facet_by shows where each group’s cells fall. Labels are the authors’ coarse types.

Matching UMAP panels split COVID-19 and healthy cells by condition. Plasmablasts are more abundant in the COVID-19 panel, and the two conditions occupy different parts of the CD14 monocyte region.

Started: 2026-10-12T13:57:04.197471Z | Wall time: 9.163 s

Two differences stand out. The plasmablast (PB) island at the top is well populated in COVID-19 but sparse in healthy blood. The CD14 monocyte island is shifted: healthy monocytes sit on its left side, while most COVID-19 monocytes occupy the right side. This suggests a condition-associated difference within the annotated cell type, but the layout alone does not establish its cause. The gene-expression comparisons below examine that difference.

These panels show where the cells lie, but donors contribute different numbers of cells. Next, compare proportions within each donor. For highlighting populations, see Core plotting features.

Composition per donor

Proportions are computed within each donor, so a donor with many cells does not dominate. The stacked view shows the composition of the cells retained in this dataset for each donor, rather than absolute cell numbers in blood. With condition_by, the kind="per_sample" view then places one point per donor for each condition: circles for COVID-19 and squares for healthy donors, with the group mean and 95% confidence interval as a diamond.

Stacked bars show cell-type proportions within each of seven COVID-19 and six healthy donors. Donor C6 has a particularly large erythrocyte fraction.

Started: 2026-10-12T13:57:13.361842Z | Wall time: 1.735 s

Per-donor cell-type proportions compare COVID-19 circles with healthy squares, alongside means and 95% confidence intervals. Plasmablast fractions are higher in patients, while several other cell types show lower fractions.

Started: 2026-10-12T13:57:15.098053Z | Wall time: 5.401 s

diseaseCOVID-19normal
PBmin0.0090.001
median0.0480.003
max0.1990.008
CD16 Monocytemin0.0010.014
median0.0050.039
max0.0860.128
gd Tmin0.0000.005
median0.0010.020
max0.0040.082
pDCmin0.0000.006
median0.0030.008
max0.0060.015
NKmin0.0280.108
median0.0500.151
max0.2070.579
RBCmin0.0000.001
median0.0070.007
max0.5420.049

Started: 2026-10-12T13:57:20.500811Z | Wall time: 0.026 s

What the per-donor proportions show:

  • Plasmablasts (PB) make up 0.9% to 20% of cells in COVID-19 donors and at most 0.8% in healthy donors. Every patient is above the healthy range, C7 only marginally.

  • CD16 monocytes, gamma-delta T cells, pDCs, and NK cells are lower in most patients. For gamma-delta T cells the two groups do not overlap at all.

  • C6 is an outlier: 54% of its cells are annotated as erythrocytes. Proportions sum to one, so such a donor lowers every other fraction, which is one reason to look at individual donors and not only group means.

With 7 and 6 donors these are descriptive observations about this cohort. For formal compositional testing, use a method that accounts for the sum-to-one constraint and donor-level variation.

Do the published labels match canonical markers?

Before using the annotations, check them against well-known PBMC markers. CyteArc resolves gene symbols without regard to case and raises an error for missing or ambiguous names. This panel uses genes present in the published dataset.

The dot plot then reads only these genes from the remote counts. Values are library-size normalized counts (the assay default) with log1p; standardize="feature" rescales each gene so weakly and strongly expressed markers are equally visible. Dot size is the fraction of cells with nonzero expression.

Started: 2026-10-12T13:57:20.528399Z | Wall time: 0.005 s

Marker dot plot across coarse blood-cell types. Dot color shows standardized mean expression and size shows detection fraction; expected lineage markers support the published annotations.

Started: 2026-10-12T13:57:20.534093Z | Wall time: 16.669 s

Each population is brightest for its expected markers: TRDC in gamma-delta T cells, GNLY and NKG7 in NK cells, MS4A1 in B cells, MZB1 and JCHAIN in plasmablasts, CD14 and LYZ in CD14 monocytes, FCGR3A in CD16 monocytes, FCER1A in DCs, LILRA4 in pDCs, PPBP in platelets, and HBB in erythrocytes. Detection fractions are modest for some markers, including CD3E and CD14, so read dot size alongside its colour. This panel supports using the published labels for the comparisons below; it is a check of selected markers, not an independent annotation of every cell.

Interferon response

Type I interferon-stimulated genes (ISGs) are a common readout of antiviral signalling. This section looks at four: IFI27, ISG15, IFI44L, and IFI6. sort_values=True draws high-expressing cells on top.

Blood-cell UMAP panels show log-normalized IFI27, ISG15, IFI44L, and IFI6 expression. IFI27 is more restricted to parts of the monocyte and erythrocyte regions than the other three genes.

Started: 2026-10-12T13:57:37.204497Z | Wall time: 17.132 s

ISG15, IFI44L, and IFI6 are expressed across many cell types, with the highest values in the right half of the monocyte island and in parts of the T and NK area. IFI27 is more restricted: it is concentrated in that same monocyte region and in the erythrocyte cluster. Faceting IFI27 by condition, on a shared color scale, shows where the signal comes from:

IFI27 expression on matching COVID-19 and healthy UMAP panels with a shared color scale. Strong signal occurs in COVID-19 monocytes and erythrocytes and is largely absent in healthy cells.

Started: 2026-10-12T13:57:54.337565Z | Wall time: 14.788 s

IFI27 is essentially absent from healthy cells. In COVID-19 samples it is strongest in the shifted monocytes noted in “The published UMAP” section and in the erythrocyte cluster.

Compare donors, not cells

The cells come from only 13 people. Treating thousands of cells as independent biological replicates can overstate the evidence for a difference between conditions. Passing sample_by="donor_id" makes CyteArc average expression within each donor first, so each point below is one donor’s mean within a cell type; split_by="disease" puts the two conditions side by side.

Donor-mean IFI27, ISG15, IFI44L, and IFI6 expression across six immune-cell types. Healthy donors remain near zero, while COVID-19 donors vary widely and some overlap the healthy range.

Started: 2026-10-12T13:58:09.126977Z | Wall time: 19.636 s

Healthy donors (orange) sit near zero for all four genes in every cell type. COVID-19 donors (blue) spread widely: several are far above the healthy range, while a few overlap it. The response is heterogeneous between patients.

To see which patients differ, summarize CD14 monocytes per donor in pandas. get_cell_vals returns one gene’s normalized values for the active cells selected by I. The code requests four genes without materializing the complete expression matrix; each request may fetch count blocks containing additional genes. ISG mean averages the four log1p values per cell. The last column is the authors’ per-cell IFN1 score averaged per donor; the original study defines it.

IFI27ISG15IFI44LIFI6ISG mean
ids
covid_555_1.11.9608000.0000000.00.00.490200
covid_555_1.20.0000000.0000000.00.00.000000
covid_555_1.31.7658480.9614590.00.00.681827
covid_555_1.70.0000000.0000000.00.00.000000
covid_555_1.80.9260000.0000000.00.00.231500

Started: 2026-10-12T13:58:28.765109Z | Wall time: 10.630 s

Restrict the summary to CD14 monocytes and compare donors.

diseaseadmissionventilatedmonocytesIFI27ISG15IFI44LIFI6ISG meanIFN1
donor_id
C1COVID-19ICUNonVent / Vent34191.3290.3700.3950.5530.6620.149
C2COVID-19ICUNonVent2170.2160.0460.0490.1110.1050.042
C3COVID-19ICUVent11020.1840.0720.0440.0860.0960.040
C4COVID-19ICUVent7131.4110.2390.4180.5250.6480.155
C5COVID-19ICUNonVent4621.6790.5400.5390.7710.8820.193
C6COVID-19ICUVent2770.8580.5090.5750.6160.6400.183
C7COVID-19FloorNonVent20950.0010.0580.0410.0530.0380.065
H1normalN/AHealthy6800.0000.0300.0250.0350.0220.039
H2normalN/AHealthy3250.0000.0500.0190.0660.0340.044
H3normalN/AHealthy2150.0000.0390.0200.0420.0250.045
H4normalN/AHealthy1660.0000.0510.0230.0660.0350.035
H5normalN/AHealthy4440.0010.0910.0370.0750.0510.055
H6normalN/AHealthy2240.0080.0550.0240.0400.0320.038

Started: 2026-10-12T13:58:39.397478Z | Wall time: 0.026 s

This table gives one expression summary per donor. As an optional numerical check, compare the seven patient means with the six healthy means and compare the four-gene summary with the authors’ IFN1 score. These are exploratory checks, not a model of disease severity.

Patients above the highest healthy donor: 6 of 7
Mann-Whitney U on donor means (7 vs 6 donors): U = 41, two-sided p = 0.0023
Spearman correlation of donor ISG mean with the authors' IFN1 score: 0.73

Started: 2026-10-12T13:58:39.424851Z | Wall time: 0.009 s

In CD14 monocytes, six of the seven patients have a higher ISG mean than any healthy donor. C1, C4, C5, and C6 are highest (about 0.64 to 0.88, against at most 0.05 in healthy donors), C2 and C3 are modestly elevated, and C7, the one patient on a general ward rather than in intensive care, lies within the healthy range. The authors’ IFN1 score ranks donors in a similar order, so this four-gene summary agrees with the study’s own score. C1’s two samples (days 9 and 11) are pooled throughout because the summaries group by donor_id.

Takeaways

Working only from the remote store, with cell metadata and 21 genes:

  • Study design came from metadata: 7 COVID-19 patients and 6 healthy donors, so the donor is the unit for every comparison.

  • Composition: plasmablasts make up a larger fraction of recovered cells in every patient (C7 only marginally), while CD16 monocytes, gamma-delta T cells, pDCs, and NK cells make up smaller fractions in most patients.

  • Cell state: CD14 monocytes from COVID-19 samples occupy a distinct region of the published UMAP, the same region with the highest interferon-stimulated gene expression.

  • Interferon response: elevated in most but not all patients. Showing each donor’s mean makes the variation between patients visible.

  • Annotations: the published labels agree with canonical PBMC markers.

Limitations

  • These are descriptive observations on published annotations from one cohort. See the original study for its full analysis and clinical context.

  • The Mann-Whitney test compares 7 donor means with 6, so its p-value reflects 13 biological replicates rather than thousands of cells. Treat it as one exploratory test: the genes, cell type, and summary were chosen after looking at the data, and 13 donors cannot account for age, sex, sampling day, or treatment.

  • The read-only store cannot save results. For new embeddings, clustering, marker detection, or donor-level testing with compare.test, mount the dataset so new results are written locally while the counts stay in the bucket:

# Mount a writable analysis store while keeping counts remote.
analysis_ds = catalog.mount_datastore(entry.id, at="./analysis.zarr")

See Compare biological conditions across donors and Pseudobulk and differential expression (DE) primer for formal condition analyses, Explore a remote dataset for mounted analysis, and Explore CyteBase for catalog search and SQL queries.

References
  1. Wilk, A. J., Rustagi, A., Zhao, N. Q., Roque, J., Martínez-Colón, G. J., McKechnie, J. L., Ivison, G. T., Ranganath, T., Vergara, R., Hollis, T., Simpson, L. J., Grant, P., Subramanian, A., Rogers, A. J., & Blish, C. A. (2020). A single-cell atlas of the peripheral immune response in patients with severe COVID-19. Nature Medicine, 26(7), 1070–1076. 10.1038/s41591-020-0944-y
  2. Abdulla, S., Aevermann, B., Assis, P., Badajoz, S., Bell, S. M., Bezzi, E., Cakir, B., Chaffer, J., Chambers, S., Cherry, J. M., Chi, T., Chien, J., Dorman, L., Garcia-Nieto, P., Gloria, N., Hastie, M., Hegeman, D., Hilton, J., Huang, T., … Carr, A. (2024). CZ CELLxGENE Discover: a single-cell data platform for scalable exploration, analysis and modeling of aggregated data. Nucleic Acids Research, 53(D1), D886–D900. 10.1093/nar/gkae1142