生信算法8 - HGVS转换与氨基酸字母表

news2024/11/25 15:51:54

HGVS 概念

HGVS 人类基因组变异协会(Human Genome Variation Society)提出的转录本编号cDNA 参考序列(以前缀“c.”表示)、氨基酸参考序列(以前缀“p.”表示)。cDNA 中一种碱基被另一种碱基取代,以“>”进行表示,如:c.2186A>G,表示与参考序列相比,在第 2186 位置的腺嘌呤(A)被鸟嘌呤(G)所取代;在氨基酸中 p.Asp729Gly,表示在第 729 位置的 Asp(天冬氨酸)被 Gly(甘氨酸)取代。

氨基酸字母与缩写转换表

python3.9实现算法。

# 氨基酸缩写与全称转换字典
dict_AA = {'A': {'Abbreviation': 'Ala', 'CN': '丙氨酸', 'EN': 'Alanine'}, 
           'F': {'Abbreviation': 'Phe', 'CN': '苯丙氨酸', 'EN': 'Phenylalanine'}, 
           'C': {'Abbreviation': 'Cys', 'CN': '半胱氨酸', 'EN': 'Cysteine'}, 
           'U': {'Abbreviation': 'Sec', 'CN': '硒半胱氨酸', 'EN': 'Selenocysteine'}, 
           'D': {'Abbreviation': 'Asp', 'CN': '天冬氨酸', 'EN': 'Aspartic acid / Aspartate'}, 
           'N': {'Abbreviation': 'Asn', 'CN': '天冬酰胺', 'EN': 'Asparagine'}, 
           'E': {'Abbreviation': 'Glu', 'CN': '谷氨酸', 'EN': 'Glutamic acid / Glutamate'}, 
           'Q': {'Abbreviation': 'Gln', 'CN': '谷氨酰胺', 'EN': 'Glutamine'}, 
           'G': {'Abbreviation': 'Gly', 'CN': '甘氨酸', 'EN': 'Glycine'}, 
           'H': {'Abbreviation': 'His', 'CN': '组氨酸', 'EN': 'Histidine'}, 
           'L': {'Abbreviation': 'Leu', 'CN': '亮氨酸', 'EN': 'Leucine'}, 
           'I': {'Abbreviation': 'Ile', 'CN': '异亮氨酸', 'EN': 'Isoleucine'},
            'K': {'Abbreviation': 'Lys', 'CN': '赖氨酸', 'EN': 'Lysine'},    
           'O': {'Abbreviation': 'Pyl', 'CN': '吡咯赖氨酸', 'EN': 'Pyrrolysine'}, 
           'M': {'Abbreviation': 'Met', 'CN': '蛋氨酸', 'EN': 'Methionine'}, 
           'P': {'Abbreviation': 'Pro', 'CN': '脯氨酸', 'EN': 'Proline'}, 
           'R': {'Abbreviation': 'Arg', 'CN': '精氨酸', 'EN': 'Arginine'}, 
            'S': {'Abbreviation': 'Ser', 'CN': '丝氨酸', 'EN': 'Serine'}, 
           'T': {'Abbreviation': 'Thr', 'CN': '苏氨酸', 'EN': 'Threonine'}, 
           'V': {'Abbreviation': 'Val', 'CN': '缬氨酸', 'EN': 'Valine'}, 
           'W': {'Abbreviation': 'Trp', 'CN': '色氨酸', 'EN': 'Tryptophan'}, 
           'Y': {'Abbreviation': 'Tyr', 'CN': '酪氨酸', 'EN': 'Tyrosine'}, 
}

# 写入文本
with open("AA_convert.txt", 'w') as fw:
    fw.write("Letter\tAbbreviation\tCN\tEN\n")
    for letter, abbr in dict_AA.items():
        print(letter, ':', abbr)
        line = "{0}\t{1}\t{2}\t{3}\n".format(letter, 
                                             abbr.get('Abbreviation', 'ERROR'),
                                             abbr.get('CN', 'ERROR'), 
                                             abbr.get('EN', 'ERROR'))
        fw.write(line)

# 从文本读取为字典
dict_AA = {}
with open("AA_convert.txt", 'r') as fr:
    # 遍历每行
    for line in fr.readlines():
        # 跳过首行
        if line.startswith('Letter'):
            continue
        line = line.strip().split('\t')
        dict_AA[line[0]] = {'Abbreviation': line[1], 'CN': line[2], 'EN': line[3]}

# 打印字典
print(dict_AA)

打印字典

打印全部氨基酸字母表

# 打印全部氨基酸字母表,用于后续re模块正则表达式
s = ''
for letter, abbr in dict_AA.items():
    if letter != 'Y':
        s += f"{letter}|"
    else:
        s += f"{letter}"
print(s)
#A|F|C|U|D|N|E|Q|G|H|L|I|K|O|M|P|R|S|T|V|W|Y

HGVS写法转换

# 对HGVS写法进行转换
# ANNOVAR注释写法
# SLC25A13:NM_014251:exon1:c.T2C:p.M1T

# 转换后写法
# c.2T>C/p.Met1Thr (NM_014251.3) Exon1/18

import re

def convert_HGVS(hgvs: str, total_exon: int):
    """
    hgvs: 待转换HGVS
    total_exon: 基因的全部外显子数量
    """
    # 按:符号分割输入hgvs
    list_hgvs = hgvs.split(':')

    gene = list_hgvs[0]
    exon = nm = cds_change = aa_change = exon_change_position = aa_change_position = ref = alt = ref_aa = alt_aa = ''
    for context in list_hgvs[1:]:
        if 'exon' in context:
            exon = context
        if 'NM' in context:
            nm = context
        elif 'c.' in context:
            cds_change = context
            
            # 匹配ref碱基、外显子发生变异的坐标和alt碱基
            match = re.search(r'([A|T|C|G]*)(\d+)([A|T|C|G]*)', cds_change)
            if match:
                # 获取ref碱基
                ref = match.group(1)
                # 获取位置
                exon_change_position = match.group(2)
                # 获取alt碱基
                alt = match.group(3)
            else:
                raise Exception("ERROR!")
                
        elif 'p.' in context:
            aa_change = context
            # 匹配ref氨基酸、外显子发生变异对应氨基酸改变的坐标和alt氨基酸
            match = re.search(r'([A|F|C|U|D|N|E|Q|G|H|L|I|K|O|M|P|R|S|T|V|W|Y]*)(\d+)([A|F|C|U|D|N|E|Q|G|H|L|I|K|O|M|P|R|S|T|V|W|Y]*)', aa_change)
            if match:
                # 获取ref氨基酸
                ref_aa = match.group(1)
                # 氨基酸改变的坐标
                aa_change_position = match.group(2)
                # 获取alt氨基酸
                alt_aa = match.group(3)

                # 将字典简写氨基酸转换为三字母缩写氨基酸
                ref_aa = dict_AA[ref_aa].get('Abbreviation', "ERROR")
                alt_aa = dict_AA[alt_aa].get('Abbreviation', "ERROR")
            else:
                raise Exception("ERROR!")
    
    # 调整写法 c.2T>C/p.Met1? (NM_014251.3) Exon1/18
    hgvs_formated = 'c.{exon_change_position}{ref}>{alt}/p.{ref_aa}{aa_change_position}{alt_aa} ({nm}) {exon}/{total_exon}'.format(exon_change_position=exon_change_position,
                                                                                                       ref=ref,
                                                                                                       alt=alt,
                                                                                                       ref_aa=ref_aa,
                                                                                                       aa_change_position=aa_change_position,
                                                                                                       alt_aa=alt_aa,
                                                                                                        nm=nm,
                                                                                                        exon= exon.capitalize(),
                                                                                                        total_exon=total_exon)
    # 打印中间变量
    print(gene, exon, cds_change, aa_change, exon_change_position, ref, alt, aa_change_position, ref_aa, alt_aa)
    return hgvs_formated 

# 测试
print(convert_HGVS(hgvs='SLC25A13:NM_014251:exon1:c.T2C:p.M1T', total_exon=18))
# c.2T>C/p.Met1Thr (NM_014251) Exon1/18

print(convert_HGVS(hgvs='PKD1:NM_001009944:exon15:c.G3496A:p.G1166S', total_exon=46))
# c.3496G>A/p.Gly1166Ser (NM_001009944) Exon15/46

生信算法文章推荐

生信算法1 - DNA测序算法实践之序列操作

生信算法2 - DNA测序算法实践之序列统计

生信算法3 - 基于k-mer算法获取序列比对索引

生信算法4 - 获取overlap序列索引和序列的算法

生信算法5 - 序列比对之全局比对算法

生信算法6 - 比对reads碱基数量统计及百分比统计

生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试之解构单元测试

软件单元测试是对软件中的最小可测试单元进行检查和验证的过程。这些单元可以是函数、方法、类实例,或者是任何具有明确功能、规格定义和接口定义的程序代码模块。单元测试是软件开发过程中的最低级别的测试活动,它确保软件的独立单元在与程序的其他部分…

Jar打包成Service在Window运行

直接启动 bat脚本直接启动jar包 Spring Boot 部署在Windows Service启动 环境 电脑环境需要安装Microsoft.NETFramework 4 Microsoft.NETFramework 4 打包 WinSW 下载exe和xml配置文件,将exe和xml放在同一个目录下,并且重命名为一样的名字&…

Ideogram-免费使用的 AI 工具,可以生成逼真的图像、海报、徽标

工具来源:Ideogram | AI工具箱 什么是Ideogram AI? Ideogram AI是一款高效的工具,旨在将文本与AI生成的图像结合在一起。该应用程序提供了用户友好的界面,使您能够轻松地制作出色的艺术作品、标志和设计。 与传统工具不同,Ideogram AI因其能够以无与伦比的简便和速度将…

Git 查看当前分支是基于哪个分支拉取(源头分支)

场景: 项目中使用 Git 管理代码仓库的时候,随着项目的持续迭代及项目的扩展,多版本并行开发是非常常见的事情,多版本并行开发就伴随着多分支,随着 Git 的分支越拉越多,这时候很容易造成分支的混乱&#xf…

webgis 之 地图投影

地图投影 什么是地图投影目的种类等角投影的分类墨卡托投影Web 墨卡托投影 参考小结 为了更好地展示地球上的数据,需要将地球投影到一个平面上。地图投影是一个数学问题,按照一定的几何关系,将地球上的经纬度坐标映射到一个平面上的坐标。地球…

由 Vault 支持的 KES 的 MinIO Operator

为了提供安全锁定和擦除的合规性功能,MinIO 使用服务器端加密 (SSE) 在存储层加密对象,以保护对象作为写入操作的一部分。MinIO 以极高的效率做到这一点——基准测试表明 MinIO 能够以接近线速进行加密/解密。 MinIO 使用的秘诀是…

【头歌】HBase扫描与过滤答案 解除复制粘贴限制

解除复制粘贴限制 当作者遇到这个限制的时候火气起来了三分,然后去网上搜索答案,然后发现了一位【碳烤小肥肠】居然不贴代码,XX链接,贴截图,瞬时火气冲顶,怒写此文 首先启动万能的控制台,然后C…

帕金森综合征的预防方法

帕金森综合征是一种慢性神经退行性疾病,目前尚无法彻底治愈。然而,通过采取一些预防措施,可以降低患病风险或延缓病情发展。以下是一些基于最新研究和医学建议的预防方法: 健康饮食:保持低盐、低脂饮食,多吃…

SQL新手蜕变:掌握这20条常用SQL语句,让你也能成为高手!

序言 在现代软件开发中,SQL(Structured Query Language,结构化查询语言)作为与数据库交互的标准编程语言,是每个开发者必学的基础技能。掌握SQL并在数据库管理与数据分析中应用自如,能显著提升开发效率和数…

语音相关算法学习整理

最近看了一下百度paddlespeech的一些公开课,把课程里的视频内容大体听了一下,现在整理一下笔记。教程链接见:飞桨AI Studio星河社区-人工智能学习与实训社区 语音识别的过程可以这样简单概括: 将声音信号经过预加重、加窗、fft等…

蓝牙数传芯片TD5325A,蓝牙5.1—拓达半导体

拓达TD5325A芯片是一款支持蓝牙BLE&SPP的纯数传芯片,蓝牙5.1版本。芯片的亮点在于性能强,支持APP端直接对芯片做设置与查询操作,包括修改蓝牙名、UUID、MAC地址,以及直接操作蓝牙芯片自身的IO与PWM口,还包括支持简…

开发产品要遵循这些「关键规则」

目录 简介 关键规则 第一点:了解产品的操作使用环境 第二点:尽可能计划将来的功能 第三点:静电 ESD 保护 第四点:尽早考虑 BOM 成本 第五点:开发文件管理(原理图、BOM、代码等) 产品资源…

如何使用Excel与Outlook实现邮件群发:详细教程

引言 在工作中,我们经常需要发送大量邮件。手动发送既费时又容易出错。本教程将教你如何使用Excel和Outlook,通过简单的VBA代码实现邮件的自动群发,提高工作效率。 准备工作 在开始之前,你需要确保以下工具已经安装在电脑上&am…

1969python房屋租赁管理系统mysql数据库Flask结构BootStrap布局计算机软件工程网页

一、源码特点 python Flask房屋租赁管理系统是一套完善的web设计系统mysql数据库 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 python flask 房屋租赁管理系统 开发环境pycharm mysql …

1958springboot VUE宿舍管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE宿舍管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发) ,系统具有完整的源代码和数…

QML 列表,图片展示(一)

文章目录 1.QML 列表,图片展示效果图2.项目基本说明3.项目详解3.1界面显示部分3.2 网络部分 4.源代码5.flickr图片查询链接,后面我们将调整代码,获取更多图片 1.QML 列表,图片展示效果图 2.项目基本说明 该项目来自Qt示例程序 Ph…

目前哪个充电宝品牌比较好?四款优质充电宝分享

在电量成为现代生活不可或缺的生产资源的时代,选择一款优质的充电宝无疑是保证移动设备持续运作的关键。面对市场上众多品牌和型号的充电宝,消费者在选择时可能会感到困惑和迷茫。本文将为您揭示哪些品牌真正代表了耐用性和质量的典范,让自己…

使用 LangServe 构建和部署 MinIO 支持的 LangChain Agent API

我们在LangChain的创新世界中的旅程揭示了其在转变数据管理和应用程序功能方面的强大能力。 通过之前的讨论,我们深入探讨了几个主题,同时探索了LangChain的复杂功能。在本文中,我们将以“使用 MinIO 赋能 Langchain 代理”中涵盖的概念为基…

数学建模系列(4/4):Matlab建模实战

目录 引言 1. Matlab简介与安装 1.1 Matlab简介 1.2 Matlab的安装 2. Matlab基础操作 2.1 Matlab基础语法和常用命令 2.2 Matlab中的数据类型和数据结构 3. 用Matlab进行建模 3.1 矩阵运算与线性代数 矩阵运算 3.2 Matlab中的绘图功能 绘制2D图形 绘制3D图形 3.3…

AI视频教程下载-用LangChain 开发 OpenAI、 LLAMA 、 Gemini 等AI应用

LangChain MasterClass- OpenAI LLAMA 2 GPT LLM Apps__ Python(LangChain MasterClass-Develop 7 OpenAI LLM Apps using Python) 探索LangChain、Pinecone、OpenAI、LLAMA 2及Google Gemini Pro LLM在现实世界中的应用。构建AI应用——拥抱脸&#xff…