Jupyter Notebook Binder

Multi-modal#

Warning

This is, for now, just a stub.

Here, we’ll showcase how to curate and register ECCITE-seq data from Papalexi21 in the form of MuData objects. ECCITE-seq is designed to enable interrogation of single-cell transcriptomes together with surface protein markers in the context of CRISPR screens.

Setup#

!lamin init --storage ./test-multimodal --schema bionty
Hide code cell output
πŸ’‘ connected lamindb: testuser1/test-multimodal
import lamindb as ln
import bionty as bt

bt.settings.organism = "human"
πŸ’‘ connected lamindb: testuser1/test-multimodal
ln.settings.transform.stem_uid = "yMWSFirS6qv2"
ln.settings.transform.version = "0"
ln.track()
πŸ’‘ notebook imports: bionty==0.42.7 lamindb==0.69.9
πŸ’‘ saved: Transform(uid='yMWSFirS6qv26K79', name='Multi-modal', key='multimodal', version='0', type='notebook', updated_at=2024-04-10 17:55:35 UTC, created_by_id=1)
πŸ’‘ saved: Run(uid='swFI1tAcGRiQmOU9wo4g', transform_id=1, created_by_id=1)

Papalexi21#

Let’s use a MuData object.

MuData objects build on top of AnnData objects to store and serialize multimodal data. More information can be found on the MuData documentation.

Hide code cell content
mdata = ln.core.datasets.mudata_papalexi21_subset()
mdata
MuData object with n_obs Γ— n_vars = 200 Γ— 300
  obs:	'perturbation', 'replicate'
  var:	'name'
  4 modalities
    rna:	200 x 173
      obs:	'nCount_RNA', 'nFeature_RNA', 'percent.mito'
      var:	'name'
    adt:	200 x 4
      obs:	'nCount_ADT', 'nFeature_ADT'
      var:	'name'
    hto:	200 x 12
      obs:	'nCount_HTO', 'nFeature_HTO', 'technique'
      var:	'name'
    gdo:	200 x 111
      obs:	'nCount_GDO'
      var:	'name'
mdata.obs
rna:nCount_RNA rna:nFeature_RNA rna:percent.mito adt:nCount_ADT adt:nFeature_ADT hto:nCount_HTO hto:nFeature_HTO hto:technique gdo:nCount_GDO adt:orig.ident ... gdo:guide_ID gdo:gene_target gdo:NT gdo:perturbation gdo:replicate gdo:S.Score gdo:G2M.Score gdo:Phase perturbation replicate
index
l7_TCGCGAGAGCGTAATA 12504 3197 2.599168 105.0 4 33.0 2 cell hashing 421.0 Lane7 ... MARCH8g2 MARCH8 MARCH8g2 Perturbed rep3 -0.177556 -0.405842 G1 Perturbed rep3
l7_TTAGGACCAGCTCGAC 20606 4490 2.955450 252.0 4 136.0 2 cell hashing 277.0 Lane7 ... IFNGR1g3 IFNGR1 IFNGR1g3 Perturbed rep3 -0.235942 -0.656860 G1 Perturbed rep3
l4_GACTGCGGTCATCGGC 11122 3216 3.173890 696.0 4 35.0 4 cell hashing 500.0 Lane4 ... MARCH8g4 MARCH8 MARCH8g4 Perturbed rep1 0.157029 -0.298696 S Perturbed rep1
l2_ACATCAGGTAACGACG 4383 1817 4.061145 59.0 4 48.0 4 cell hashing 272.0 Lane2 ... CAV1g4 CAV1 CAV1g4 Perturbed rep1 -0.001038 -0.167919 G1 Perturbed rep1
l5_AGACGTTCACCGAATT 18345 3741 2.649223 832.0 4 365.0 2 cell hashing 201.0 Lane5 ... IRF7g1 IRF7 IRF7g1 Perturbed rep2 -0.077955 -0.717423 G1 Perturbed rep2
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
l7_CATGGCGGTTGTACAC 15791 3760 2.381103 340.0 4 77.0 3 cell hashing 147.0 Lane7 ... STAT5Ag1 STAT5A STAT5Ag1 Perturbed rep3 -0.271486 -0.502034 G1 Perturbed rep3
l4_CCATGTCCAATCCAAC 7147 2603 5.694697 692.0 4 120.0 4 cell hashing 221.0 Lane4 ... ATF2g1 ATF2 ATF2g1 Perturbed rep1 -0.145687 -0.320501 G1 Perturbed rep1
l6_TTGTAGGAGGGATGGG 14558 3961 2.211842 449.0 4 160.0 4 cell hashing 196.0 Lane6 ... STAT2g4 STAT2 STAT2g4 Perturbed rep2 -0.165096 -0.561920 G1 Perturbed rep2
l2_GGCTGGTTCTAACGGT 12217 3178 1.874437 154.0 4 112.0 4 cell hashing 169.0 Lane2 ... CMTM6g1 CMTM6 CMTM6g1 Perturbed rep1 -0.135304 -0.469901 G1 Perturbed rep1
l7_GTGTGCGAGTCCTCCT 4108 1742 3.797468 147.0 4 42.0 3 cell hashing 125.0 Lane7 ... POU2F2g1 POU2F2 POU2F2g1 Perturbed rep3 -0.058626 -0.133698 G1 Perturbed rep3

200 rows Γ— 47 columns

Standardize and validate metadata#

annotate = ln.Annotate.from_mudata(
    mdata,
    var_index={
        "rna": bt.Gene.symbol, # gene expression
        "adt": bt.CellMarker.name, # antibody derived tags reflecting surface proteins
        "hto": ln.Feature.name, # cell hashing
        "gdo": ln.Feature.name, # guide RNAs
    },
    categoricals={
        "perturbation": ln.ULabel.name, "replicate": ln.ULabel.name, # shared categoricals
        "hto:technique": bt.ExperimentalFactor.name # note this is a modality specific categorical
    }
)
βœ… added 2 records with Feature.name for columns: ['perturbation', 'replicate']
❗ 45 non-validated categories are not saved in Feature.name: ['gdo:MULTI_ID', 'adt:replicate', 'adt:guide_ID', 'rna:nFeature_RNA', 'gdo:NT', 'hto:G2M.Score', 'gdo:percent.mito', 'adt:perturbation', 'gdo:nCount_GDO', 'adt:Phase', 'hto:orig.ident', 'hto:nCount_HTO', 'gdo:orig.ident', 'hto:NT', 'hto:perturbation', 'gdo:Phase', 'gdo:S.Score', 'hto:Phase', 'adt:nCount_ADT', 'adt:percent.mito', 'hto:S.Score', 'gdo:gene_target', 'hto:technique', 'gdo:G2M.Score', 'adt:NT', 'adt:S.Score', 'hto:MULTI_ID', 'gdo:HTO_classification', 'hto:nFeature_HTO', 'hto:HTO_classification', 'adt:HTO_classification', 'gdo:perturbation', 'rna:percent.mito', 'gdo:guide_ID', 'adt:MULTI_ID', 'adt:orig.ident', 'rna:nCount_RNA', 'gdo:replicate', 'hto:gene_target', 'adt:nFeature_ADT', 'hto:percent.mito', 'hto:guide_ID', 'adt:G2M.Score', 'adt:gene_target', 'hto:replicate']!
      β†’ to lookup categories, use lookup().columns
      β†’ to save, run add_new_from_columns
❗ 1 non-validated categories are not saved in Feature.name: ['nCount_GDO']!
      β†’ to lookup categories, use lookup().columns
      β†’ to save, run add_new_from_columns
βœ… added 1 record with Feature.name for columns: ['technique']
❗ 2 non-validated categories are not saved in Feature.name: ['nFeature_HTO', 'nCount_HTO']!
      β†’ to lookup categories, use lookup().columns
      β†’ to save, run add_new_from_columns
❗ 3 non-validated categories are not saved in Feature.name: ['percent.mito', 'nCount_RNA', 'nFeature_RNA']!
      β†’ to lookup categories, use lookup().columns
      β†’ to save, run add_new_from_columns
❗ 2 non-validated categories are not saved in Feature.name: ['nCount_ADT', 'nFeature_ADT']!
      β†’ to lookup categories, use lookup().columns
      β†’ to save, run add_new_from_columns
βœ… added 100 records from public with Gene.symbol for var_index: ['SH2D6', 'MEF2C-AS2', 'ARHGAP26-AS1', 'GABRA1', 'H4C12', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'SPACA1', 'VNN1', 'CTAGE15', 'CTAGE15', 'PFKFB1', 'TRPC5', 'RBPMS-AS1', 'CA8', 'CSMD3', 'ZNF483', 'AK8', 'TMEM72-AS1', 'ARAP1-AS2', 'CRYAB', 'DNAI7', 'HOXC-AS2', 'LRRIQ1', 'TUBA3C', 'MYO16', 'FSD2', 'CERS3', 'CDH8', 'CLEC18C', 'CTRB2', 'CTRB2', 'LGALS9C', 'LGALS9C', 'CRYBA1', 'RPRML', 'COL5A3', 'HPN', 'NPHS1', 'MIA', 'TULP2', 'NUCB1-AS1', 'LARGE1', 'AP4B1-AS1', 'NBPF15', 'CCDC185', 'IBA57-DT', 'ANKRD53', 'LRP1B', 'ASIC4', 'MST1R', 'THPO', 'NWD2', 'FTMT', 'PCDHB11', 'PCDHB11', 'TIMD4', 'PACSIN1', 'TRDN', 'XG', 'LINC02912', 'DPYSL4', 'RPS6KB2-AS1', 'C11orf87', 'DUOX1', 'AIPL1', 'TBC1D3G', 'TBC1D3G', 'EFCAB3', 'RIPOR3', 'TUBB1', 'ADORA2A', 'PLA2G2A', 'MKNK1-AS1', 'ITLN1', 'RNU6ATAC35P', 'OR1C1', 'PLGLB2', 'LXN', 'UTS2B', 'ADCY2', 'PCDHGA7', 'PXDNL', 'TCF24', 'SLC46A2', 'AMBP', 'TPH2', 'LINC02914', 'TEKT5', 'SMCR5', 'GRAPL', 'MIR451B', 'L3MBTL4', 'MYO18B', 'TMPRSS3']
❗ 84 non-validated categories are not saved in Gene.symbol: ['RP5-827C21.6', 'XX-CR54.1', 'RP11-379B18.5', 'RP11-778D9.12', 'RP11-703G6.1', 'AC005150.1', 'RP11-717H13.1', 'CTC-498J12.1', 'RP11-524H19.2', 'AC006042.7', 'AC002066.1', 'AC073934.6', 'RP11-268G12.1', 'U52111.14', 'RP11-235C23.5', 'RP11-12J10.3', 'RP11-324E6.9', 'RP11-187A9.3', 'RP11-365N19.2', 'RP11-346D14.1', 'RP11-265N6.2', 'CTD-3065B20.2', 'RP11-304L19.11', 'AC026471.6', 'AC091132.1', 'RP11-138C9.1', 'RP11-75C10.9', 'RP11-835E18.5', 'RP11-760N9.1', 'RP11-17J14.2', 'CTD-3193O13.8', 'AC004019.13', 'RP11-465N4.4', 'RP11-434D9.1', 'RP11-325L7.1', 'RP11-134K13.4', 'RP5-855F16.1', 'RP3-327A19.5', 'RP11-546K22.3', 'RP11-473O4.4', 'RP13-582O9.7', 'RP11-12D24.10', 'RP11-120C12.3', 'RP11-80H5.7', 'RP11-496I9.1', 'AP000442.4', 'RP11-867G23.3', 'RP11-113K21.4', 'RP11-745O10.2', 'RP11-335O4.3', 'RP11-408E5.4', 'AE000662.93', 'AL132989.1', 'RP11-973N13.4', 'RP11-982M15.2', 'RP11-32B5.7', 'RP1-1J6.2', 'RP3-337O18.9', 'AC011558.5', 'CTA-373H7.7', 'RP11-415J8.5', 'AC092687.5', 'RP11-532F6.4', 'RP11-146I2.1', 'RP11-624M8.1', 'RP11-219B4.7', 'RP11-9M16.2', 'RP11-247A12.8', 'RP11-536K7.5', 'RP11-186N15.3', 'RP11-152H18.3', 'CTD-3012A18.1', 'CTD-2562J17.2', 'RP11-136I14.5', 'RP11-110I1.14', 'RP11-2H8.2', 'RP11-307N16.6', 'RP11-3D4.2', 'RP11-231C14.4', 'CTB-134F13.1', 'RP11-403P17.5', 'RP11-214C8.2', 'CTB-31O20.9', 'AC092295.4']!
      β†’ to lookup categories, use lookup().var_index
      β†’ to save, run add_new_from_var_index
βœ… added 4 records from public with CellMarker.name for var_index: ['CD86', 'PDL1', 'PDL2', 'CD366']
❗ 12 non-validated categories are not saved in Feature.name: ['rep1-tx', 'rep1-ctrl', 'rep2-tx', 'rep2-ctrl', 'PDL1g1-tx', 'PDL1g1-ctrl', 'PDL1g2-tx', 'PDL1g2-ctrl', 'rep3-tx', 'rep3-ctrl', 'rep4-tx', 'rep4-ctrl']!
      β†’ to lookup categories, use lookup().var_index
      β†’ to save, run add_new_from_var_index
❗ 111 non-validated categories are not saved in Feature.name: ['eGFPg1', 'CUL3g1', 'CUL3g2', 'CUL3g3', 'CMTM6g1', 'CMTM6g2', 'CMTM6g3', 'NTg1', 'NTg2', 'NTg3', 'NTg4', 'NTg5', 'NTg7', 'PDL1g1', 'PDL1g2', 'PDL1g3', 'ATF2g1', 'ATF2g2', 'ATF2g3', 'ATF2g4', 'BRD4g1', 'BRD4g2', 'BRD4g3', 'BRD4g4', 'CAV1g1', 'CAV1g2', 'CAV1g3', 'CAV1g4', 'CD86g1', 'CD86g2', 'CD86g3', 'CD86g4', 'ETV7g1', 'ETV7g2', 'ETV7g3', 'ETV7g4', 'IFNGR1g1', 'IFNGR1g2', 'IFNGR1g3', 'IFNGR1g4', 'IFNGR2g1', 'IFNGR2g2', 'IFNGR2g3', 'IFNGR2g4', 'IRF1g1', 'IRF1g2', 'IRF1g3', 'IRF1g4', 'IRF7g1', 'IRF7g2', 'IRF7g3', 'IRF7g4', 'JAK2g1', 'JAK2g2', 'JAK2g3', 'JAK2g4', 'MARCH8g1', 'MARCH8g2', 'MARCH8g3', 'MARCH8g4', 'MYCg1', 'MYCg2', 'MYCg3', 'MYCg4', 'NFKBIAg1', 'NFKBIAg2', 'NFKBIAg3', 'NFKBIAg4', 'PDCD1LG2g1', 'PDCD1LG2g2', 'PDCD1LG2g3', 'PDCD1LG2g4', 'POU2F2g1', 'POU2F2g2', 'POU2F2g3', 'POU2F2g4', 'SMAD4g1', 'SMAD4g2', 'SMAD4g3', 'SMAD4g4', 'SPI1g1', 'SPI1g2', 'SPI1g3', 'SPI1g4', 'STAT1g1', 'STAT1g2', 'STAT1g3', 'STAT1g4', 'STAT2g1', 'STAT2g2', 'STAT2g3', 'STAT2g4', 'STAT3g1', 'STAT3g2', 'STAT3g3', 'STAT3g4', 'STAT5Ag1', 'STAT5Ag2', 'STAT5Ag3', 'STAT5Ag4', 'TNFRSF14g1', 'TNFRSF14g2', 'TNFRSF14g3', 'TNFRSF14g4', 'UBE2L6g1', 'UBE2L6g2', 'UBE2L6g3', 'UBE2L6g4', 'NTg8', 'NTg9', 'NTg10']!
      β†’ to lookup categories, use lookup().var_index
      β†’ to save, run add_new_from_var_index
# add new gene symbols from the ['rna'].var.index
annotate.add_new_from_var_index("rna")
# add new categories from the hto and gdo var.index
annotate.add_new_from_var_index("hto")
annotate.add_new_from_var_index("gdo")
βœ… added 84 records with Gene.symbol for var_index: ['RP5-827C21.6', 'XX-CR54.1', 'RP11-379B18.5', 'RP11-778D9.12', 'RP11-703G6.1', 'AC005150.1', 'RP11-717H13.1', 'CTC-498J12.1', 'RP11-524H19.2', 'AC006042.7', 'AC002066.1', 'AC073934.6', 'RP11-268G12.1', 'U52111.14', 'RP11-235C23.5', 'RP11-12J10.3', 'RP11-324E6.9', 'RP11-187A9.3', 'RP11-365N19.2', 'RP11-346D14.1', 'RP11-265N6.2', 'CTD-3065B20.2', 'RP11-304L19.11', 'AC026471.6', 'AC091132.1', 'RP11-138C9.1', 'RP11-75C10.9', 'RP11-835E18.5', 'RP11-760N9.1', 'RP11-17J14.2', 'CTD-3193O13.8', 'AC004019.13', 'RP11-465N4.4', 'RP11-434D9.1', 'RP11-325L7.1', 'RP11-134K13.4', 'RP5-855F16.1', 'RP3-327A19.5', 'RP11-546K22.3', 'RP11-473O4.4', 'RP13-582O9.7', 'RP11-12D24.10', 'RP11-120C12.3', 'RP11-80H5.7', 'RP11-496I9.1', 'AP000442.4', 'RP11-867G23.3', 'RP11-113K21.4', 'RP11-745O10.2', 'RP11-335O4.3', 'RP11-408E5.4', 'AE000662.93', 'AL132989.1', 'RP11-973N13.4', 'RP11-982M15.2', 'RP11-32B5.7', 'RP1-1J6.2', 'RP3-337O18.9', 'AC011558.5', 'CTA-373H7.7', 'RP11-415J8.5', 'AC092687.5', 'RP11-532F6.4', 'RP11-146I2.1', 'RP11-624M8.1', 'RP11-219B4.7', 'RP11-9M16.2', 'RP11-247A12.8', 'RP11-536K7.5', 'RP11-186N15.3', 'RP11-152H18.3', 'CTD-3012A18.1', 'CTD-2562J17.2', 'RP11-136I14.5', 'RP11-110I1.14', 'RP11-2H8.2', 'RP11-307N16.6', 'RP11-3D4.2', 'RP11-231C14.4', 'CTB-134F13.1', 'RP11-403P17.5', 'RP11-214C8.2', 'CTB-31O20.9', 'AC092295.4']
βœ… added 12 records with Feature.name for var_index: ['rep1-tx', 'rep1-ctrl', 'rep2-tx', 'rep2-ctrl', 'PDL1g1-tx', 'PDL1g1-ctrl', 'PDL1g2-tx', 'PDL1g2-ctrl', 'rep3-tx', 'rep3-ctrl', 'rep4-tx', 'rep4-ctrl']
βœ… added 111 records with Feature.name for var_index: ['eGFPg1', 'CUL3g1', 'CUL3g2', 'CUL3g3', 'CMTM6g1', 'CMTM6g2', 'CMTM6g3', 'NTg1', 'NTg2', 'NTg3', 'NTg4', 'NTg5', 'NTg7', 'PDL1g1', 'PDL1g2', 'PDL1g3', 'ATF2g1', 'ATF2g2', 'ATF2g3', 'ATF2g4', 'BRD4g1', 'BRD4g2', 'BRD4g3', 'BRD4g4', 'CAV1g1', 'CAV1g2', 'CAV1g3', 'CAV1g4', 'CD86g1', 'CD86g2', 'CD86g3', 'CD86g4', 'ETV7g1', 'ETV7g2', 'ETV7g3', 'ETV7g4', 'IFNGR1g1', 'IFNGR1g2', 'IFNGR1g3', 'IFNGR1g4', 'IFNGR2g1', 'IFNGR2g2', 'IFNGR2g3', 'IFNGR2g4', 'IRF1g1', 'IRF1g2', 'IRF1g3', 'IRF1g4', 'IRF7g1', 'IRF7g2', 'IRF7g3', 'IRF7g4', 'JAK2g1', 'JAK2g2', 'JAK2g3', 'JAK2g4', 'MARCH8g1', 'MARCH8g2', 'MARCH8g3', 'MARCH8g4', 'MYCg1', 'MYCg2', 'MYCg3', 'MYCg4', 'NFKBIAg1', 'NFKBIAg2', 'NFKBIAg3', 'NFKBIAg4', 'PDCD1LG2g1', 'PDCD1LG2g2', 'PDCD1LG2g3', 'PDCD1LG2g4', 'POU2F2g1', 'POU2F2g2', 'POU2F2g3', 'POU2F2g4', 'SMAD4g1', 'SMAD4g2', 'SMAD4g3', 'SMAD4g4', 'SPI1g1', 'SPI1g2', 'SPI1g3', 'SPI1g4', 'STAT1g1', 'STAT1g2', 'STAT1g3', 'STAT1g4', 'STAT2g1', 'STAT2g2', 'STAT2g3', 'STAT2g4', 'STAT3g1', 'STAT3g2', 'STAT3g3', 'STAT3g4', 'STAT5Ag1', 'STAT5Ag2', 'STAT5Ag3', 'STAT5Ag4', 'TNFRSF14g1', 'TNFRSF14g2', 'TNFRSF14g3', 'TNFRSF14g4', 'UBE2L6g1', 'UBE2L6g2', 'UBE2L6g3', 'UBE2L6g4', 'NTg8', 'NTg9', 'NTg10']
# optional: register additional columns we'd like to annotate
annotate.add_new_from_columns(modality="rna")
annotate.add_new_from_columns(modality="adt")
annotate.add_new_from_columns(modality="hto")
annotate.add_new_from_columns(modality="gdo")
βœ… added 3 records with Feature.name for rna obs columns: ['nCount_RNA', 'nFeature_RNA', 'percent.mito']
βœ… added 2 records with Feature.name for adt obs columns: ['nCount_ADT', 'nFeature_ADT']
βœ… added 2 records with Feature.name for hto obs columns: ['nCount_HTO', 'nFeature_HTO']
βœ… added 1 record with Feature.name for gdo obs columns: ['nCount_GDO']
annotate.validate()
βœ… rna_var_index is validated against Gene.symbol
βœ… adt_var_index is validated against CellMarker.name
βœ… hto_var_index is validated against Feature.name
βœ… gdo_var_index is validated against Feature.name
πŸ’‘ mapping perturbation on ULabel.name
❗    2 terms are not validated: 'Perturbed', 'NT'
      β†’ save terms via .add_new_from('perturbation')
πŸ’‘ mapping replicate on ULabel.name
❗    3 terms are not validated: 'rep3', 'rep1', 'rep2'
      β†’ save terms via .add_new_from('replicate')
πŸ’‘ mapping technique on ExperimentalFactor.name
❗    found 1 terms validated terms: ['cell hashing']
      β†’ save terms via .add_validated_from('technique')
βœ… technique is validated against ExperimentalFactor.name
False
# add validated and new categories
annotate.add_new_from("perturbation")
annotate.add_new_from("replicate")
annotate.add_validated_from("technique", modality="hto")
βœ… added 2 records with ULabel.name for perturbation: ['Perturbed', 'NT']
βœ… added 3 records with ULabel.name for replicate: ['rep3', 'rep1', 'rep2']
βœ… added 1 record from public with ExperimentalFactor.name for technique: ['cell hashing']
annotate.validate()
βœ… rna_var_index is validated against Gene.symbol
βœ… adt_var_index is validated against CellMarker.name
βœ… hto_var_index is validated against Feature.name
βœ… gdo_var_index is validated against Feature.name
βœ… perturbation is validated against ULabel.name
βœ… replicate is validated against ULabel.name
βœ… technique is validated against ExperimentalFactor.name
True

Register and annotate artifact#

artifact = annotate.save_artifact(description="Sub-sampled MuData from Papalexi21")
πŸ’‘ path content will be copied to default storage upon `save()` with key `None` ('.lamindb/yaCRqkoL4LsoNUIGajIN.h5mu')
βœ… storing artifact 'yaCRqkoL4LsoNUIGajIN' at '/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal/.lamindb/yaCRqkoL4LsoNUIGajIN.h5mu'
βœ… loaded 2 Feature records matching name: 'perturbation', 'replicate'
❗ did not create Feature records for 45 non-validated names: 'adt:G2M.Score', 'adt:HTO_classification', 'adt:MULTI_ID', 'adt:NT', 'adt:Phase', 'adt:S.Score', 'adt:gene_target', 'adt:guide_ID', 'adt:nCount_ADT', 'adt:nFeature_ADT', 'adt:orig.ident', 'adt:percent.mito', 'adt:perturbation', 'adt:replicate', 'gdo:G2M.Score', 'gdo:HTO_classification', 'gdo:MULTI_ID', 'gdo:NT', 'gdo:Phase', 'gdo:S.Score', ...
πŸ’‘ parsing feature names of X stored in slot 'var'
βœ…    161 terms (93.10%) are validated for symbol
❗    12 terms (6.90%) are not validated for symbol: CTC-467M3.1, HIST1H4K, CASC1, LARGE, NBPF16, C1orf65, IBA57-AS1, KIAA1239, TMEM75, AP003419.16, FAM65C, C14orf177
βœ…    linked: FeatureSet(uid='SRF8MYIufGUgsj9AB3xK', n=172, type='number', registry='bionty.Gene', hash='y1Qo897t3gp9S3it4dz6', created_by_id=1)
πŸ’‘ parsing feature names of slot 'obs'
βœ…    3 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='M0LghFmEP5wBHNvD9sNa', n=3, registry='core.Feature', hash='457_5CReuYVQ2edcpUnN', created_by_id=1)
πŸ’‘ parsing feature names of X stored in slot 'var'
βœ…    4 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='rArSW98rnZjZRtQiyiZt', n=4, type='number', registry='bionty.CellMarker', hash='o8EDT805HnP0Fmk4uZ9e', created_by_id=1)
πŸ’‘ parsing feature names of slot 'obs'
βœ…    2 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='pgfMWKv6iRUmAgzHSgwl', n=2, registry='core.Feature', hash='hrXuonzbBQFHpbGBHyIT', created_by_id=1)
πŸ’‘ parsing feature names of X stored in slot 'var'
βœ…    12 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='jngfHbpT3SVlIxRpCzMe', n=12, type='number', registry='core.Feature', hash='gM2aYFz79jZyFoAMczlw', created_by_id=1)
πŸ’‘ parsing feature names of slot 'obs'
βœ…    3 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='4yXtCccFxQ1P5WxGyplD', n=3, registry='core.Feature', hash='qYVwM6D5DLp_EPClH82H', created_by_id=1)
πŸ’‘ parsing feature names of X stored in slot 'var'
βœ…    111 terms (100.00%) are validated for name
βœ…    linked: FeatureSet(uid='SJFpRy7mS75gzVnSkHsS', n=111, type='number', registry='core.Feature', hash='x-Nv5rj1zxDcBqxH5byT', created_by_id=1)
πŸ’‘ parsing feature names of slot 'obs'
βœ…    1 term (100.00%) is validated for name
βœ…    linked: FeatureSet(uid='vledpLXJlYgu4AodoBLy', n=1, registry='core.Feature', hash='afyby-cpdP9M-2V9kbsa', created_by_id=1)
βœ… saved 9 feature sets for slots: 'obs','['rna'].var','['rna'].obs','['adt'].var','['adt'].obs','['hto'].var','['hto'].obs','['gdo'].var','['gdo'].obs'
βœ… linked feature 'perturbation' to registry 'core.ULabel'
βœ… linked feature 'replicate' to registry 'core.ULabel'
βœ… linked feature 'technique' to registry 'bionty.ExperimentalFactor'
artifact.describe()
Artifact(uid='yaCRqkoL4LsoNUIGajIN', suffix='.h5mu', accessor='MuData', description='Sub-sampled MuData from Papalexi21', size=545560, hash='252nP4Nu-pLH37ZgQQ_tOw', hash_type='md5', n_observations=200, visibility=1, key_is_virtual=True, updated_at=2024-04-10 17:55:49 UTC)

Provenance:
  πŸ“Ž storage: Storage(uid='5h5Ek76O', root='/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal', type='local', updated_at=2024-04-10 17:55:31 UTC, created_by_id=1)
  πŸ“Ž transform: Transform(uid='yMWSFirS6qv26K79', name='Multi-modal', key='multimodal', version='0', type='notebook', updated_at=2024-04-10 17:55:35 UTC, created_by_id=1)
  πŸ“Ž run: Run(uid='swFI1tAcGRiQmOU9wo4g', started_at=2024-04-10 17:55:35 UTC, is_consecutive=True, transform_id=1, created_by_id=1)
  πŸ“Ž created_by: User(uid='DzTjkKse', handle='testuser1', name='Test User1', updated_at=2024-04-10 17:55:31 UTC)
Features:
  obs: FeatureSet(uid='HCir8DFdI1HkGL95bHId', n=2, registry='core.Feature', hash='sS83bkY5Ps3R3UO9B-y0', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    πŸ”— perturbation (2, core.ULabel): 'Perturbed', 'NT'
    πŸ”— replicate (3, core.ULabel): 'rep3', 'rep1', 'rep2'
  ['rna'].var: FeatureSet(uid='SRF8MYIufGUgsj9AB3xK', n=172, type='number', registry='bionty.Gene', hash='y1Qo897t3gp9S3it4dz6', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    'SH2D6', 'ARHGAP26-AS1', 'GABRA1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'HLA-DQB1-AS1', 'SPACA1', 'VNN1', 'CTAGE15', 'CTAGE15', 'PFKFB1', 'TRPC5', 'RBPMS-AS1', 'CA8', 'CSMD3', 'ZNF483', ...
  ['rna'].obs: FeatureSet(uid='M0LghFmEP5wBHNvD9sNa', n=3, registry='core.Feature', hash='457_5CReuYVQ2edcpUnN', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    nFeature_RNA (number)
    percent.mito (number)
    nCount_RNA (number)
  ['adt'].var: FeatureSet(uid='rArSW98rnZjZRtQiyiZt', n=4, type='number', registry='bionty.CellMarker', hash='o8EDT805HnP0Fmk4uZ9e', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    'CD86', 'PDL1', 'PDL2', 'CD366'
  ['adt'].obs: FeatureSet(uid='pgfMWKv6iRUmAgzHSgwl', n=2, registry='core.Feature', hash='hrXuonzbBQFHpbGBHyIT', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    nCount_ADT (number)
    nFeature_ADT (number)
  ['hto'].var: FeatureSet(uid='jngfHbpT3SVlIxRpCzMe', n=12, type='number', registry='core.Feature', hash='gM2aYFz79jZyFoAMczlw', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    rep1-tx (category)
    rep1-ctrl (category)
    rep2-tx (category)
    rep2-ctrl (category)
    PDL1g1-tx (category)
    PDL1g1-ctrl (category)
    PDL1g2-tx (category)
    PDL1g2-ctrl (category)
    rep3-tx (category)
    rep3-ctrl (category)
    rep4-tx (category)
    rep4-ctrl (category)
  ['hto'].obs: FeatureSet(uid='4yXtCccFxQ1P5WxGyplD', n=3, registry='core.Feature', hash='qYVwM6D5DLp_EPClH82H', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    πŸ”— technique (1, bionty.ExperimentalFactor): 'cell hashing'
    nCount_HTO (number)
    nFeature_HTO (number)
  ['gdo'].var: FeatureSet(uid='SJFpRy7mS75gzVnSkHsS', n=111, type='number', registry='core.Feature', hash='x-Nv5rj1zxDcBqxH5byT', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    eGFPg1 (category)
    CUL3g1 (category)
    CUL3g2 (category)
    CUL3g3 (category)
    CMTM6g1 (category)
    CMTM6g2 (category)
    CMTM6g3 (category)
    NTg1 (category)
    NTg2 (category)
    NTg3 (category)
    NTg4 (category)
    NTg5 (category)
    NTg7 (category)
    PDL1g1 (category)
    PDL1g2 (category)
    PDL1g3 (category)
    ATF2g1 (category)
    ATF2g2 (category)
    ATF2g3 (category)
    ATF2g4 (category)
    BRD4g1 (category)
    BRD4g2 (category)
    BRD4g3 (category)
    BRD4g4 (category)
    CAV1g1 (category)
    CAV1g2 (category)
    CAV1g3 (category)
    CAV1g4 (category)
    CD86g1 (category)
    CD86g2 (category)
    CD86g3 (category)
    CD86g4 (category)
    ETV7g1 (category)
    ETV7g2 (category)
    ETV7g3 (category)
    ETV7g4 (category)
    IFNGR1g1 (category)
    IFNGR1g2 (category)
    IFNGR1g3 (category)
    IFNGR1g4 (category)
    IFNGR2g1 (category)
    IFNGR2g2 (category)
    IFNGR2g3 (category)
    IFNGR2g4 (category)
    IRF1g1 (category)
    IRF1g2 (category)
    IRF1g3 (category)
    IRF1g4 (category)
    IRF7g1 (category)
    IRF7g2 (category)
    IRF7g3 (category)
    IRF7g4 (category)
    JAK2g1 (category)
    JAK2g2 (category)
    JAK2g3 (category)
    JAK2g4 (category)
    MARCH8g1 (category)
    MARCH8g2 (category)
    MARCH8g3 (category)
    MARCH8g4 (category)
    MYCg1 (category)
    MYCg2 (category)
    MYCg3 (category)
    MYCg4 (category)
    NFKBIAg1 (category)
    NFKBIAg2 (category)
    NFKBIAg3 (category)
    NFKBIAg4 (category)
    PDCD1LG2g1 (category)
    PDCD1LG2g2 (category)
    PDCD1LG2g3 (category)
    PDCD1LG2g4 (category)
    POU2F2g1 (category)
    POU2F2g2 (category)
    POU2F2g3 (category)
    POU2F2g4 (category)
    SMAD4g1 (category)
    SMAD4g2 (category)
    SMAD4g3 (category)
    SMAD4g4 (category)
    SPI1g1 (category)
    SPI1g2 (category)
    SPI1g3 (category)
    SPI1g4 (category)
    STAT1g1 (category)
    STAT1g2 (category)
    STAT1g3 (category)
    STAT1g4 (category)
    STAT2g1 (category)
    STAT2g2 (category)
    STAT2g3 (category)
    STAT2g4 (category)
    STAT3g1 (category)
    STAT3g2 (category)
    STAT3g3 (category)
    STAT3g4 (category)
    STAT5Ag1 (category)
    STAT5Ag2 (category)
    STAT5Ag3 (category)
    STAT5Ag4 (category)
    TNFRSF14g1 (category)
    TNFRSF14g2 (category)
    TNFRSF14g3 (category)
    TNFRSF14g4 (category)
    UBE2L6g1 (category)
    UBE2L6g2 (category)
    UBE2L6g3 (category)
    UBE2L6g4 (category)
    NTg8 (category)
    NTg9 (category)
    NTg10 (category)
  ['gdo'].obs: FeatureSet(uid='vledpLXJlYgu4AodoBLy', n=1, registry='core.Feature', hash='afyby-cpdP9M-2V9kbsa', updated_at=2024-04-10 17:55:49 UTC, created_by_id=1)
    nCount_GDO (number)
Labels:
  πŸ“Ž experimental_factors (1, bionty.ExperimentalFactor): 'cell hashing'
  πŸ“Ž ulabels (5, core.ULabel): 'Perturbed', 'NT', 'rep3', 'rep1', 'rep2'
artifact.view_lineage()
_images/3eb1e4f1fd6eb6f8ace67a409f5062025189e760750f394a1cc25d6bf088debe.svg
# clean up test instance
!lamin delete --force test-multimodal
!rm -r test-multimodal
Hide code cell output
πŸ’‘ deleting instance testuser1/test-multimodal
❗ manually delete your stored data: /home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal