基因存在或缺失判断依据

3K文章判断依据,CDS>95%,body>85%
怎么判断测序样本的reads与参考基因组比对,每一个基因的CDS区域与基因主体区域,如果CDS区域大于95%且基因主体大于85%的判断为基因存在于样本中,否则该基因不存在?
  1. reads与基因组进行比对。
  2. 根据比对结果,提取reads在基因组上的位置信息。
  3. 根据基因注释文件,确定CDS区域和基因主体的范围。
  4. 计算reads在CDS区域的比例,判断是否大于95%。
  5. 计算reads在基因主体的比例,判断是否大于85%。
  6. 遍历比对结果,统计每个基因的CDS区域和基因主体区域的比对情况。
###下面是一个示例代码,用于判断每个基因的CDS区域和基因主体区域的比对情况,并判断基因是否存在于样本中:

```python
# 导入所需的库
import pysam

# 输入文件路径
genome_file = "genome.fasta"  # 基因组文件
reads_file = "reads.fastq"  # reads文件
annotation_file = "annotation.gtf"  # 基因组注释文件

# 定义变量
genes = {}  # 存储每个基因的CDS区域和基因主体区域的比对情况

# 读取基因组注释文件,提取CDS区域和基因主体区域的位置信息
with open(annotation_file, 'r') as f:
    for line in f:
        if not line.startswith('#'):
            fields = line.strip().split('\t')
            feature_type = fields[2]
            if feature_type == 'gene':
                gene_id = fields[8].split(';')[0].split(' ')[1].replace('"', '')
                genes[gene_id] = {'cds_count': 0, 'gene_body_count': 0, 'cds_ratio': 0, 'gene_body_ratio': 0}
            elif feature_type == 'CDS':
                start = int(fields[3])
                end = int(fields[4])
                gene_id = fields[8].split(';')[0].split(' ')[1].replace('"', '')
                if gene_id in genes:
                    genes[gene_id]['cds_regions'] = genes[gene_id].get('cds_regions', []) + [(start, end)]
            elif feature_type == 'exon':
                start = int(fields[3])
                end = int(fields[4])
                gene_id = fields[8].split(';')[0].split(' ')[1].replace('"', '')
                if gene_id in genes:
                    genes[gene_id]['gene_body_regions'] = genes[gene_id].get('gene_body_regions', []) + [(start, end)]

# 遍历reads文件,比对到基因组上并计数
with pysam.FastxFile(reads_file) as reads:
    for read in reads:
        seq = read.sequence
        # 进行比对,这里假设使用Bowtie进行比对,需提前安装并设置好环境
        sam_output = pysam.view("-S", "-q", "10", genome_file, "-", "-o", "temp.sam", "-")
        with open("temp.sam", 'r') as samfile:
            for line in samfile:
                fields = line.strip().split('\t')
                gene_id = fields[2]  # 假设基因信息在SAM文件的第三列
                if gene_id in genes:
                    genes[gene_id]['cds_count'] += 1 if any(start <= int(fields[3]) <= end for start, end in genes[gene_id]['cds_regions']) else 0
                    genes[gene_id]['gene_body_count'] += 1 if any(start <= int(fields[3]) <= end for start, end in genes[gene_id]['gene_body_regions']) else 0

# 计算每个基因的CDS区域和基因主体区域的比例,并判断基因是否存在于样本中
for gene_id, gene_info in genes.items():
    cds_ratio = gene_info['cds_count'] / total_count * 100
    gene_body_ratio = gene_info['gene_body_count'] / total_count * 100
    gene_info['cds_ratio'] = cds_ratio
    gene_info['gene_body_ratio'] = gene_body_ratio
    if cds_ratio > 95 and gene_body_ratio > 85:
        gene_info['exists_in_sample'] = True
    else:
        gene_info['exists_in_sample'] = False

# 打印结果
for gene_id, gene_info in genes.items():
    print("基因ID:{}".format(gene_id))
    print("CDS区域比例:{:.2f}%".format(gene_info['cds_ratio']))
    print("基因主体比例:{:.2f}%".format(gene_info['gene_body_ratio']))
    print("是否存在于样本中:{}".format(gene_info['exists_in_sample']))
    print()
来自知网
>80%外显子
使用SGSGeneLoss软件

参考:
Wang, W., Mauleon, R., Hu, Z. et al. Genomic variation in 3,010 diverse accessions of Asian cultivated rice. Nature 557, 43–49 (2018). https://doi.org/10.1038/s41586-018-0063-9

Gao, L., Gonda, I., Sun, H. et al. The tomato pan-genome uncovers new genes and a rare allele regulating fruit flavor. Nat Genet 51, 1044–1051 (2019). https://doi.org/10.1038/s41588-019-0410-2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容