Source code for metatime.mecs

"""
## class and functions for meta components
"""
import numpy as np
import pandas as pd
import os
import sys

from metatime import config

################  Special manual annotation of MetaTiME precomputed MeCs #############

[docs]def load_mecname( mode='table', mecDIR= config.SCMECDIR ): """ Load functional annotation for pre-computed tumor microenvironemnt MeCs Parameters ---------- mode choose from ['mecnamedict', 'table', 'meciddict'] load manual assigned name for easy understanding of assigned names from file: MeC_anno_name.tsv under mecDIR. Required columns: `['MeC_id', 'Annotation', 'UseForCellStateAnno']` Required seperator: tab Annotation column NA will be filtered. Returns ---------- functional annotation in desided format """ mecname = pd.read_table(os.path.join( mecDIR , 'MeC_anno_name.tsv')) if(mode=='table'): mectable=mecname.copy() #mectable['color_level0'] = mectable['MajorLineage_level0'].apply(lambda t: config.level0colordict[t]) return(mectable) else: mask = (~mecname['Annotation'].isna()) #mecname.loc[mask,'Annotation']=mecname.loc[mask,'MeC_id' ] mecnamedict = mecname[mask].set_index('MeC_id')[['Annotation']].to_dict()['Annotation'] if(mode=='mecnamedict'): return(mecnamedict)
[docs]def getmecnamedict_ct( mectable, only_include_mecs_UseForCellStateAnno = True ): """ Collect list of meta components to be used for cell state annotation. Parameters ---------- mectable must have `UseForCellStateAnno` column with 0 or 1. 1:used in cell state annotation. this is helpful to remove pan-cell cell state like general mitochondrial activity component. only_include_mecs_UseForCellStateAnno filter mecs used for cell state annotation. Default: True Returns ---------- dict a subsetted dictionary only containing MeCs used for cell state enrichment. """ if(only_include_mecs_UseForCellStateAnno): mecnamedict = mectable[mectable['UseForCellStateAnno']==1].set_index('MeC_id')['Annotation'].to_dict() else: mecnamedict = mectable.set_index('MeC_id')['Annotation'].to_dict() return(mecnamedict)
[docs]class MetatimeMecs(): """ Class for MetaTiME Mecs. Parameters ---------- modelpath directory of model files Attributes ---------- mecscore pandas dataframe, z-weights gene by component mectopg pandas dataframe, list for top gene only mecanno pandas dataframe, annotation for each mec. """ def __init__(self, mec_score, mec_topg, mec_anno ) : self.mec_score = mec_score self.mec_topg = mec_topg self.mec_anno = mec_anno
[docs] @staticmethod def load_mec_precomputed( mecDIR = config.SCMECDIR, ): """ Load pre-computed Meta-component matrix and ordered list. Look for precomputed files in mecDIR MeC_allgene_average-weights.tsv MeC_topgene.tsv Parameters ---------- mecDIR Path for model files Returns ---------- MetatimeMecs Loaded MeCs Examples ---------- >>> mecmodel = mecs.MetatimeMecs.load_mec_precomputed() """ try: mec_score = pd.read_table( os.path.join( mecDIR , 'MeC_allgene_average-weights.tsv') , index_col = 0) mec_topg = pd.read_table( os.path.join( mecDIR, 'MeC_topgene.tsv') , index_col = 0) mec_anno = pd.read_table( os.path.join( mecDIR, 'MeC_anno.tsv') , index_col = 0) # use 'MeC' name mec_score.columns = 'MeC_'+mec_score.columns return( MetatimeMecs( mec_score, mec_topg, mec_anno ) ) except Exception as exception: raise Exception(f' Error loading model. check files in {mecDIR}. MeC_allgene_average-weights.tsv, MeC_topgene.tsv, MeC_anno.tsv. {exception}')
@property def feature(self) -> np.ndarray: """ get genes covered in the mec z-weight matrix """ return( self.mec_score.index) @property def nmecs(self) -> np.float: """ get number of meta-components """ return( self.mec_score.columns.shape[0])
# interpretation functions