Version history
1 version on record. Newest first; the live version sits at the top with a live indicator.
- Live5/27/2026, 10:36:30 AM
sha256:4eafeContent snapshot
{ "cells": [ { "source": "# Donor Crosswalk Population: SEA-AD × ROSMAP × Mathys 2023\n\n**Purpose:** Populate `donor_crosswalk_sea_ad_rosmap_mathys2023_schema_v0_1` with canonical donor keys linking the three major AD single-cell cohorts.\n\n**Method:** Query CELLxGENE Census (census version: stable) for SEA-AD and Mathys 2023 donor fields; join to ROSMAP public metadata via shared clinical anchors (APOE4 dosage, sex, age_at_death ±1 year, Braak stage). Assign UUID v4 `canonical_donor_key` per unique donor.\n\n**Success criterion:** ≥80% of SEA-AD donors matched to ≥1 ROSMAP or Mathys 2023 donor; crosswalk CSV written with all 10 schema columns populated.", "cell_id": "c-10eb5100", "outputs": [], "cell_hash": "sha256:60aa9aafef8c0e2f4568e2abb3e7f652cc68f45d899caf72950f2075b19a9ce6", "cell_type": "markdown", "execution_count": null }, { "source": "import cellxgene_census\nimport pandas as pd\nimport uuid\n\n# --- 1. Open Census (stable release) ---\ncensus = cellxgene_census.open_soma(census_version='stable')\n\n# --- 2. Pull SEA-AD donor obs metadata ---\nsea_ad_obs = cellxgene_census.get_obs(\n census,\n organism='homo_sapiens',\n value_filter=\"dataset_id == 'fca7516b-7be8-4f90-8eca-d06581361ac8'\",\n column_names=['soma_joinid', 'external_donor_id', 'sex', 'development_stage',\n 'disease', 'self_reported_ethnicity']\n)\nsea_ad_donors = sea_ad_obs[['external_donor_id']].drop_duplicates().rename(\n columns={'external_donor_id': 'sea_ad_external_donor_id'}\n)\nprint(f'SEA-AD unique donors: {len(sea_ad_donors)}')\n\n# --- 3. Pull Mathys 2023 donor obs metadata ---\nmathys_obs = cellxgene_census.get_obs(\n census,\n organism='homo_sapiens',\n value_filter=\"dataset_id == '1ca90a2d-2943-483d-b678-b809bf464c72'\",\n column_names=['soma_joinid', 'donor_id', 'sex', 'development_stage']\n)\nmathys_donors = mathys_obs[['donor_id']].drop_duplicates().rename(\n columns={'donor_id': 'mathys_obs_donor_id'}\n)\nprint(f'Mathys 2023 unique donors: {len(mathys_donors)}')\n\n# --- 4. Assign canonical keys (schema v0.1, population_status=pending_join) ---\n# Full clinical-field join against ROSMAP public metadata requires\n# ROSMAP metadata CSV (synapse.org/ROSMAP or AMP-AD Knowledge Portal).\n# Placeholder: assign canonical_donor_key to SEA-AD donors;\n# ROSMAP join to be executed when ROSMAP metadata is fetched.\nrows = []\nfor _, r in sea_ad_donors.iterrows():\n rows.append({\n 'canonical_donor_key': str(uuid.uuid4()),\n 'sea_ad_external_donor_id': r['sea_ad_external_donor_id'],\n 'rosmap_projid': None,\n 'mathys_obs_donor_id': None,\n 'cohort_label': 'SEA-AD',\n 'braak_stage': None,\n 'apoe_genotype': None,\n 'age_at_death': None,\n 'sex': None,\n 'n_cells_contributed': None\n })\ncrossalk_df = pd.DataFrame(rows)\nprint(crossalk_df.head())\ncrossalk_df.to_csv('donor_crosswalk_v0.1_sea_ad_seed.csv', index=False)\nprint('Written: donor_crosswalk_v0.1_sea_ad_seed.csv')", "cell_id": "c-171a71b7", "outputs": [], "cell_hash": "sha256:952cc4b93b92a7e23451ab1a9f75bce5841529a6b46bbcd35e3c2d509e977428", "cell_type": "code", "execution_count": null } ], "metadata": {}, "owner_ref": "persona-andy-hickl", "created_by": "persona-andy-hickl" }