Jupyter Notebook Binder

Multi-modal#

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.

MuData objects build on top of AnnData objects to store multimodal data.

!lamin init --storage ./test-multimodal --schema bionty
Hide code cell output
๐Ÿ’ก connected lamindb: testuser1/test-multimodal
import lamindb as ln
import bionty as bt
๐Ÿ’ก connected lamindb: testuser1/test-multimodal
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'

Validate annotations#

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,  # shared categorical
        "replicate": ln.ULabel.name, # shared categorical
        "hto:technique": bt.ExperimentalFactor.name # note this is a modality specific categorical
    },
    organism="human",
)
Hide code cell output
โ— 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
โ— 3 non-validated categories are not saved in Feature.name: ['nCount_RNA', 'nFeature_RNA', 'percent.mito']!
      โ†’ 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
โœ… added 2 records with Feature.name for columns: ['perturbation', 'replicate']
โ— 45 non-validated categories are not saved in Feature.name: ['gdo:orig.ident', 'gdo:nCount_GDO', 'hto:replicate', 'adt:nCount_ADT', 'adt:G2M.Score', 'hto:orig.ident', 'gdo:guide_ID', 'gdo:S.Score', 'hto:gene_target', 'gdo:MULTI_ID', 'adt:Phase', 'gdo:gene_target', 'adt:NT', 'gdo:NT', 'gdo:G2M.Score', 'hto:G2M.Score', 'adt:HTO_classification', 'hto:HTO_classification', 'hto:MULTI_ID', 'adt:orig.ident', 'hto:technique', 'gdo:perturbation', 'gdo:HTO_classification', 'hto:S.Score', 'adt:replicate', 'hto:guide_ID', 'hto:percent.mito', 'hto:nFeature_HTO', 'adt:MULTI_ID', 'rna:percent.mito', 'hto:nCount_HTO', 'gdo:Phase', 'adt:gene_target', 'adt:guide_ID', 'hto:Phase', 'adt:S.Score', 'adt:perturbation', 'adt:percent.mito', 'hto:perturbation', 'rna:nCount_RNA', 'adt:nFeature_ADT', 'gdo:replicate', 'rna:nFeature_RNA', 'hto:NT', 'gdo:percent.mito']!
      โ†’ 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")

# 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")
Hide code cell output
โœ… 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']
โœ… 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()
Hide code cell output
โœ… 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: 'rep1', 'rep2', 'rep3'
      โ†’ 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")
Hide code cell output
โœ… 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()
Hide code cell output
โœ… 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 annotated artifact#

artifact = annotate.save_artifact(description="Sub-sampled MuData from Papalexi21")
Hide code cell output
โ— no run & transform get linked, consider calling ln.track()
๐Ÿ’ก path content will be copied to default storage upon `save()` with key `None` ('.lamindb/ksePGeWF4Hu0RZQtvdyb.h5mu')
โœ… storing artifact 'ksePGeWF4Hu0RZQtvdyb' at '/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal/.lamindb/ksePGeWF4Hu0RZQtvdyb.h5mu'
๐Ÿ’ก you can auto-track these data as a run input by calling `ln.track()`
โœ… loaded 2 Feature records matching name: 'replicate', 'perturbation'
โ— did not create Feature records for 45 non-validated names: 'gdo:orig.ident', 'gdo:nCount_GDO', 'hto:replicate', 'adt:G2M.Score', 'adt:nCount_ADT', 'hto:orig.ident', 'gdo:guide_ID', 'gdo:S.Score', 'hto:gene_target', 'gdo:MULTI_ID', 'adt:Phase', 'gdo:gene_target', 'gdo:G2M.Score', 'adt:NT', 'gdo:NT', 'hto:G2M.Score', 'adt:HTO_classification', 'hto:HTO_classification', 'hto:MULTI_ID', 'adt:orig.ident', ...
๐Ÿ’ก 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='gjxsGg0bmbzh7NVxm3Z1', 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='LxLRBYopFCfQ8AYZkWK5', n=3, registry='core.Feature', hash='iI97BkYSHCj0z6nnzkmp', created_by_id=1)
๐Ÿ’ก parsing feature names of X stored in slot 'var'
โœ…    4 terms (100.00%) are validated for name
โœ…    linked: FeatureSet(uid='7GRd7C9mKS5VnfxXfJG3', 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='NDQL1UOiWtf77L6CY7jC', n=2, registry='core.Feature', hash='E2eQTwM3sE2Geu3NluG2', created_by_id=1)
๐Ÿ’ก parsing feature names of X stored in slot 'var'
โœ…    12 terms (100.00%) are validated for name
โœ…    linked: FeatureSet(uid='rkwc9psUcikw50vDsDHT', n=12, type='number', registry='core.Feature', hash='yIDJe6DQM-yL2TD5fUQT', created_by_id=1)
๐Ÿ’ก parsing feature names of slot 'obs'
โœ…    3 terms (100.00%) are validated for name
โœ…    linked: FeatureSet(uid='WMUcGTlVir4P1yK25Eqd', n=3, registry='core.Feature', hash='D2B3oOJghwkQd9MbjQWr', created_by_id=1)
๐Ÿ’ก parsing feature names of X stored in slot 'var'
โœ…    111 terms (100.00%) are validated for name
โœ…    linked: FeatureSet(uid='T1iMwxs2jpVUKdtnjXVz', n=111, type='number', registry='core.Feature', hash='-_Dvm2HbEhiWNRFmAOBi', created_by_id=1)
๐Ÿ’ก parsing feature names of slot 'obs'
โœ…    1 term (100.00%) is validated for name
โœ…    linked: FeatureSet(uid='t129JBxIibDWLhkSaNLx', n=1, registry='core.Feature', hash='-r9ZeZxoH2NPG1oUc60e', 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='ksePGeWF4Hu0RZQtvdyb', 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-05-01 18:55:08 UTC)

Provenance:
  ๐Ÿ“Ž storage: Storage(uid='IWRqd3gGPSxf', root='/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal', type='local', instance_uid='666lWiEzyXvj')
  ๐Ÿ“Ž created_by: User(uid='DzTjkKse', handle='testuser1', name='Test User1')
Features:
  obs: FeatureSet(uid='XhOcrtFJ2KYO5a88vpjN', n=2, registry='core.Feature')
    ๐Ÿ”— perturbation (2, core.ULabel): 'Perturbed', 'NT'
    ๐Ÿ”— replicate (3, core.ULabel): 'rep1', 'rep2', 'rep3'
  ['rna'].var: FeatureSet(uid='gjxsGg0bmbzh7NVxm3Z1', n=172, type='number', registry='bionty.Gene')
    'PACSIN1', 'ZNF483', 'AE000662.93', 'AC092687.5', 'CTD-3193O13.8', 'RP11-415J8.5', 'RP11-760N9.1', 'L3MBTL4', 'TEKT5', 'CRYBA1', 'AIPL1', 'AC011558.5', 'RP11-403P17.5', 'MST1R', 'RP11-473O4.4', 'AC006042.7', 'ARAP1-AS2', 'TRPC5', 'GABRA1', 'PLA2G2A', ...
  ['rna'].obs: FeatureSet(uid='LxLRBYopFCfQ8AYZkWK5', n=3, registry='core.Feature')
    nFeature_RNA (number)
    percent.mito (number)
    nCount_RNA (number)
  ['adt'].var: FeatureSet(uid='7GRd7C9mKS5VnfxXfJG3', n=4, type='number', registry='bionty.CellMarker')
    'CD366', 'PDL1', 'CD86', 'PDL2'
  ['adt'].obs: FeatureSet(uid='NDQL1UOiWtf77L6CY7jC', n=2, registry='core.Feature')
    nCount_ADT (number)
    nFeature_ADT (number)
  ['hto'].var: FeatureSet(uid='rkwc9psUcikw50vDsDHT', n=12, type='number', registry='core.Feature')
    rep1-tx (number)
    rep1-ctrl (number)
    rep2-tx (number)
    rep2-ctrl (number)
    PDL1g1-tx (number)
    PDL1g1-ctrl (number)
    PDL1g2-tx (number)
    PDL1g2-ctrl (number)
    rep3-tx (number)
    rep3-ctrl (number)
    rep4-tx (number)
    rep4-ctrl (number)
  ['hto'].obs: FeatureSet(uid='WMUcGTlVir4P1yK25Eqd', n=3, registry='core.Feature')
    ๐Ÿ”— technique (1, bionty.ExperimentalFactor): 'cell hashing'
    nCount_HTO (number)
    nFeature_HTO (number)
  ['gdo'].var: FeatureSet(uid='T1iMwxs2jpVUKdtnjXVz', n=111, type='number', registry='core.Feature')
    eGFPg1 (number)
    CUL3g1 (number)
    CUL3g2 (number)
    CUL3g3 (number)
    CMTM6g1 (number)
    CMTM6g2 (number)
    CMTM6g3 (number)
    NTg1 (number)
    NTg2 (number)
    NTg3 (number)
    NTg4 (number)
    NTg5 (number)
    NTg7 (number)
    PDL1g1 (number)
    PDL1g2 (number)
    PDL1g3 (number)
    ATF2g1 (number)
    ATF2g2 (number)
    ATF2g3 (number)
    ATF2g4 (number)
    BRD4g1 (number)
    BRD4g2 (number)
    BRD4g3 (number)
    BRD4g4 (number)
    CAV1g1 (number)
    CAV1g2 (number)
    CAV1g3 (number)
    CAV1g4 (number)
    CD86g1 (number)
    CD86g2 (number)
    CD86g3 (number)
    CD86g4 (number)
    ETV7g1 (number)
    ETV7g2 (number)
    ETV7g3 (number)
    ETV7g4 (number)
    IFNGR1g1 (number)
    IFNGR1g2 (number)
    IFNGR1g3 (number)
    IFNGR1g4 (number)
    IFNGR2g1 (number)
    IFNGR2g2 (number)
    IFNGR2g3 (number)
    IFNGR2g4 (number)
    IRF1g1 (number)
    IRF1g2 (number)
    IRF1g3 (number)
    IRF1g4 (number)
    IRF7g1 (number)
    IRF7g2 (number)
    IRF7g3 (number)
    IRF7g4 (number)
    JAK2g1 (number)
    JAK2g2 (number)
    JAK2g3 (number)
    JAK2g4 (number)
    MARCH8g1 (number)
    MARCH8g2 (number)
    MARCH8g3 (number)
    MARCH8g4 (number)
    MYCg1 (number)
    MYCg2 (number)
    MYCg3 (number)
    MYCg4 (number)
    NFKBIAg1 (number)
    NFKBIAg2 (number)
    NFKBIAg3 (number)
    NFKBIAg4 (number)
    PDCD1LG2g1 (number)
    PDCD1LG2g2 (number)
    PDCD1LG2g3 (number)
    PDCD1LG2g4 (number)
    POU2F2g1 (number)
    POU2F2g2 (number)
    POU2F2g3 (number)
    POU2F2g4 (number)
    SMAD4g1 (number)
    SMAD4g2 (number)
    SMAD4g3 (number)
    SMAD4g4 (number)
    SPI1g1 (number)
    SPI1g2 (number)
    SPI1g3 (number)
    SPI1g4 (number)
    STAT1g1 (number)
    STAT1g2 (number)
    STAT1g3 (number)
    STAT1g4 (number)
    STAT2g1 (number)
    STAT2g2 (number)
    STAT2g3 (number)
    STAT2g4 (number)
    STAT3g1 (number)
    STAT3g2 (number)
    STAT3g3 (number)
    STAT3g4 (number)
    STAT5Ag1 (number)
    STAT5Ag2 (number)
    STAT5Ag3 (number)
    STAT5Ag4 (number)
    TNFRSF14g1 (number)
    TNFRSF14g2 (number)
    TNFRSF14g3 (number)
    TNFRSF14g4 (number)
    UBE2L6g1 (number)
    UBE2L6g2 (number)
    UBE2L6g3 (number)
    UBE2L6g4 (number)
    NTg8 (number)
    NTg9 (number)
    NTg10 (number)
  ['gdo'].obs: FeatureSet(uid='t129JBxIibDWLhkSaNLx', n=1, registry='core.Feature')
    nCount_GDO (number)
Labels:
  ๐Ÿ“Ž experimental_factors (1, bionty.ExperimentalFactor): 'cell hashing'
  ๐Ÿ“Ž ulabels (5, core.ULabel): 'NT', 'rep1', 'Perturbed', 'rep2', 'rep3'
# clean up test instance
!lamin delete --force test-multimodal
!rm -r test-multimodal
Hide code cell output
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.10.14/x64/bin/lamin", line 8, in <module>
    sys.exit(main())
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/rich_click/rich_command.py", line 360, in __call__
    return super().__call__(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/rich_click/rich_command.py", line 152, in main
    rv = self.invoke(ctx)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/lamin_cli/__main__.py", line 103, in delete
    return delete(instance, force=force)
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/lamindb_setup/_delete.py", line 140, in delete
    n_objects = check_storage_is_empty(
  File "/opt/hostedtoolcache/Python/3.10.14/x64/lib/python3.10/site-packages/lamindb_setup/core/upath.py", line 814, in check_storage_is_empty
    raise InstanceNotEmpty(message)
lamindb_setup.core.upath.InstanceNotEmpty: Storage /home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal/.lamindb contains 2 objects ('./lamindb/_is_initialized'  ignored) - delete them prior to deleting the instance
['/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal/.lamindb/_is_initialized', '/home/runner/work/lamin-usecases/lamin-usecases/docs/test-multimodal/.lamindb/ksePGeWF4Hu0RZQtvdyb.h5mu']