ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Scanpy源码浅析之tl.score_genes_cell_cycle

2022-09-11 21:33:41  阅读:211  来源: 互联网

标签:genes 浅析 score phase G2M adata 源码 size


版本

导入Scanpy, 其版本为'1.9.1'。

import scanpy as sc

sc.__version__
#'1.9.1'

功能

函数tl.score_genes_cell_cycle用给定S phase 和 G2M phase的两个基因集,计算打分,然后根据得分分配细胞phase, 其源代码在scanpy/tools/_score_genes.py
关于打分细节,见上一篇https://www.yuque.com/huangsh/lq16ea/zbvnce

参数设置:

  • adata: AnnData 对象
  • s_gene S phase gene list
  • g2m_geneG2M phase gene list
  • copy是否复制一个新adata
  • **kwargs 传递给 tl.score_genes的其他参数。ctrl_size已经固定为:
    • min(len(s_genes), len(g2m_genes))

代码解析

全部代码

def score_genes_cell_cycle(
    adata: AnnData,
    s_genes: Sequence[str],
    g2m_genes: Sequence[str],
    copy: bool = False,
    **kwargs,
) -> Optional[AnnData]:

    logg.info('calculating cell cycle phase')

    adata = adata.copy() if copy else adata
    ctrl_size = min(len(s_genes), len(g2m_genes))
    # add s-score
    score_genes(
        adata, gene_list=s_genes, score_name='S_score', ctrl_size=ctrl_size, **kwargs
    )
    # add g2m-score
    score_genes(
        adata,
        gene_list=g2m_genes,
        score_name='G2M_score',
        ctrl_size=ctrl_size,
        **kwargs,
    )
    scores = adata.obs[['S_score', 'G2M_score']]

    # default phase is S
    phase = pd.Series('S', index=scores.index)

    # if G2M is higher than S, it's G2M
    phase[scores.G2M_score > scores.S_score] = 'G2M'

    # if all scores are negative, it's G1...
    phase[np.all(scores < 0, axis=1)] = 'G1'

    adata.obs['phase'] = phase
    logg.hint('    \'phase\', cell cycle phase (adata.obs)')
    return adata if copy else None

选择ctrl_size

以s_genes, g2m_genes中最小数目作为ctrl_size

ctrl_size = min(len(s_genes), len(g2m_genes))

计算 s-score,g2m-score

score_genes上一篇已经写过。

    # add s-score
    score_genes(
        adata, gene_list=s_genes, score_name='S_score', ctrl_size=ctrl_size, **kwargs
    )
    # add g2m-score
    score_genes(
        adata,
        gene_list=g2m_genes,
        score_name='G2M_score',
        ctrl_size=ctrl_size,
        **kwargs,
    )

分配phase

默认所有细胞都为S phase,
如果计算G2M_score > S_score, 则归类为G2M phase
如果'S_score', 'G2M_score' < 0, 则则归类为G1 phase

	# 取出 'S_score', 'G2M_score'
	scores = adata.obs[['S_score', 'G2M_score']]

    # default phase is S
    phase = pd.Series('S', index=scores.index)

    # if G2M is higher than S, it's G2M
    phase[scores.G2M_score > scores.S_score] = 'G2M'

    # if all scores are negative, it's G1...
    phase[np.all(scores < 0, axis=1)] = 'G1'

    adata.obs['phase'] = phase
    logg.hint('    \'phase\', cell cycle phase (adata.obs)')
    return adata if copy else None

标签:genes,浅析,score,phase,G2M,adata,源码,size
来源: https://www.cnblogs.com/huanping/p/16684874.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有