可视化结构域序列并提取序列

news/2025/11/6 12:41:06/文章来源:https://www.cnblogs.com/Zarinan/p/19196244

1、可视化

点击查看代码
from Bio import AlignIO
import os# ====== 用户参数 ======
alignment_file = "比对.fa"    # 输入比对文件(fasta/clustal)
alignment_format = "fasta"
html_output = "msa_ruvc_all.html"# 背景渐变蓝色(保守性)
light_blue = "ffffff"
dark_blue  = "ffff66"# RUVC1/2/3 定义(基于 ungapped 序列位置,1-based)
RUVC1 = {"FnCas12a_6I1K_1": [(892, 953)],"LbCas12a_5ID6_1": [(809, 858)],"LbCas12a_6NME_1": [(808, 872)],"Lb2Cas12a_8I54_1": [(792, 852)],"ReChb_Cas12a_1": [(853, 914)],
}
RUVC2 = {"FnCas12a_6I1K_1": [(971, 1078)],"LbCas12a_5ID6_1": [(890, 1011)],"LbCas12a_6NME_1": [(890, 997)],"Lb2Cas12a_8I54_1": [(869, 992)],"ReChb_Cas12a_1": [(930, 1044)],
}
RUVC3 = {"FnCas12a_6I1K_1": [(1254, 1300)],"LbCas12a_5ID6_1": [(1138, 1228)],"LbCas12a_6NME_1": [(1179, 1228)],"Lb2Cas12a_8I54_1": [(1151, 1206)],"ReChb_Cas12a_1": [(1215, 1261)],
}# RUVC 样式
RUVC_color = "#ff0000"  # 所有 RUVC 使用同一颜色
RUVC_italic = False     # 是否斜体# ====== 读取比对 ======
alignment = AlignIO.read(alignment_file, alignment_format)
seq_len = alignment.get_alignment_length()# 计算保守性
conservation = []
for i in range(seq_len):column = [rec.seq[i] for rec in alignment]chars = [aa for aa in column if aa != "-"]freq = max([chars.count(aa)/len(chars) for aa in set(chars)]) if chars else 0.0conservation.append(freq)# ====== 辅助函数 ======
def hex_to_rgb(hexstr):return int(hexstr[0:2], 16), int(hexstr[2:4], 16), int(hexstr[4:6], 16)def rgb_to_hex(r, g, b):return f"{r:02x}{g:02x}{b:02x}"lr, lg, lb = hex_to_rgb(light_blue)
dr, dg, db = hex_to_rgb(dark_blue)# 将 ungapped 座标映射到 alignment 座标
def build_ruvc_aligned(ruvc_dict, alignment):result = {}for rec in alignment:seq_id = rec.idseq = str(rec.seq)mapping = [i for i, ch in enumerate(seq) if ch != "-"]if seq_id in ruvc_dict:newranges = []seq_len = len(mapping)for s, e in ruvc_dict[seq_id]:if s > seq_len:continuestart_al = mapping[s-1]end_al   = mapping[min(e, seq_len)-1]if start_al <= end_al:newranges.append((start_al, end_al))if newranges:result[seq_id] = newrangesreturn resultRUVC1_aligned = build_ruvc_aligned(RUVC1, alignment)
RUVC2_aligned = build_ruvc_aligned(RUVC2, alignment)
RUVC3_aligned = build_ruvc_aligned(RUVC3, alignment)# 判断某位置是否属于任意 RUVC
def in_ruvc(seq_id, pos, aa):if aa == "-":return Falsefor ruvc_map in [RUVC1_aligned, RUVC2_aligned, RUVC3_aligned]:for start, end in ruvc_map.get(seq_id, []):if start <= pos <= end:return Truereturn False# ====== 生成 HTML ======
with open(html_output, "w", encoding="utf-8") as out:out.write("<!doctype html><html lang='zh-CN'><head><meta charset='utf-8'>\n")out.write("<title>MSA - RUVC 高亮</title>\n")out.write("""<style>body{font-family:Consolas,monospace;padding:16px}table{border-collapse:collapse;}td.id{vertical-align:top;padding:4px 8px;white-space:nowrap;}td.seq{vertical-align:top;padding:4px 8px;white-space:pre;font-size:16px;}span.res{display:inline-block;padding:0 1px;cursor:pointer;}#zoom-controls{margin-bottom:10px;}</style><script>let currentZoom = 1.0;function zoomIn(){currentZoom += 0.1; updateZoom();}function zoomOut(){currentZoom = Math.max(0.5, currentZoom - 0.1); updateZoom();}function updateZoom(){document.querySelectorAll('td.seq').forEach(e=>{e.style.fontSize = (16 * currentZoom) + 'px';});}function showInfo(seqId, alignedPos, ungappedPos, aa){alert(`序列: ${seqId}\\n氨基酸: ${aa}\\n比对位置: ${alignedPos+1}\\n原序列位置: ${ungappedPos}`);}</script></head><body><h2>多序列比对(RUVC 高亮) — """ + os.path.basename(alignment_file) + """</h2><div id='zoom-controls'><button onclick='zoomIn()'>放大</button><button onclick='zoomOut()'>缩小</button></div><div style='overflow-x:auto'><table>""")for rec in alignment:seq_id = rec.idseq = str(rec.seq)out.write("<tr>")out.write(f"<td class='id'>{seq_id}</td>")out.write("<td class='seq'>")ungapped_pos = 0for i, aa in enumerate(seq):if aa != "-":ungapped_pos += 1# 背景渐变白→荧光黄if aa == "-":bg = "#ffffff"color = "#000000"style_extra = ""else:cons = conservation[i]r = int(round(lr + (dr - lr) * cons))g = int(round(lg + (dg - lg) * cons))b = int(round(lb + (db - lb) * cons))bg = "#" + rgb_to_hex(r, g, b)# RUVC 标注if in_ruvc(seq_id, i, aa):color = RUVC_colorstyle_extra = "font-style:italic;" if RUVC_italic else ""else:color = "#000000"style_extra = ""out.write(f"<span class='res' style='background-color:{bg};color:{color};{style_extra}' "f"onclick=\"showInfo('{seq_id}', {i}, {ungapped_pos if aa!='-' else 'null'}, '{aa}')\">{aa}</span>")out.write("</td></tr>\n")out.write("</table></div></body></html>\n")print(f"已生成:{html_output}")

2、提取结构域区域序列

点击查看代码
from Bio import AlignIO# ====== 用户参数 ======
alignment_file = "比对.fa"    # 输入多序列比对文件
alignment_format = "fasta"
output_fasta = "Cas12a_RUVC1.fasta"  # 输出文件
start_pos = 1610
end_pos = 1865# ====== 读取比对 ======
alignment = AlignIO.read(alignment_file, alignment_format)
seq_len = alignment.get_alignment_length()print(f"总比对长度:{seq_len}")
if end_pos > seq_len:raise ValueError(f"区间 {end_pos} 超出比对长度 {seq_len}")# ====== 提取区间并去掉空位符 ======
records = []
for rec in alignment:seq_id = rec.idseq_str = str(rec.seq)# 截取对应区间(1-based → Python 0-based)sub_seq = seq_str[start_pos-1:end_pos]# 去掉空位符sub_seq_nogap = sub_seq.replace("-", "")records.append((seq_id, sub_seq_nogap))# ====== 输出为 FASTA ======
with open(output_fasta, "w", encoding="utf-8") as f:for seq_id, seq in records:f.write(f">{seq_id}\n{seq}\n")print(f"✅ 已生成文件:{output_fasta}")
print(f"提取区间:{start_pos}-{end_pos},共 {len(records)} 条序列。")

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

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

相关文章

2025年11月国际连锁酒店投资加盟推荐:专业评价与选择指南

随着酒店行业逐渐复苏,越来越多的投资者将目光投向国际连锁酒店加盟领域。这类投资者通常具备一定的资金实力,希望通过加盟成熟品牌降低经营风险,同时获得稳定的投资回报。他们可能是首次进入酒店行业的创业者,也可…

vue 安装后端调试接口 - 东方不败-

vue2 安装低版本的:npm install -g json-server@0.17.4

动态规划经典题

动态规划专题动态规划专题基础入门系列经典习题509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯 62.不同路径 63.不同路径II 343.整数拆分 96.不同的二叉搜索树背包问题系列01背包问题416.分割等和子集 1049.最后一块…

2025年11月国际连锁酒店投资加盟推荐榜:五大品牌综合对比分析

对于有意向投资国际连锁酒店的投资者而言,选择正确的加盟品牌是决定项目成败的关键一步。这类投资者通常具备一定的资金实力,寻求稳健且可持续的投资回报,他们可能是经验丰富的酒店业者,希望借助国际品牌提升竞争力…

2025年11月连锁酒店加盟品牌推荐榜单:权威解析五大品牌投资价值对比

作为酒店行业的投资者,您可能正在寻找一个具备稳定回报和成熟运营体系的连锁酒店加盟品牌。随着国内商旅市场持续复苏,中端酒店市场呈现出较高的增长潜力,但面对众多品牌选择,投资者常面临品牌辨识度不足、投资回报…

sql 常用命令

1、mysql 服务的启动和停止 net stop mysql net start mysql 2、登录mysql mysql (-h IP)-u 用户名 -p 密码 3、grant 权限 on 数据库. to 用户名@登录主机 identified by "密码"* 例:增加一个用户user密…

今日依旧是java的基础知识内容

java基础知识内容 java的优势与特点简单性 面向对象 多线程 分布式 可移植性 高性能 安全性 健壮性 动态性java为什么能成功与时代契合 踩上了时代的洪流 满足了人们的需求 优势与特点无法替代java三大版本JavaME(嵌入…

基于Java+SSM+Flask网上授课体系(源码+LW+调试文档+讲解等)/在线教育平台/网络教学软件/远程授课器具/在线课程系统/网课平台/视频教学系统/网上教学平台/网络教育系统

基于Java+SSM+Flask网上授课体系(源码+LW+调试文档+讲解等)/在线教育平台/网络教学软件/远程授课器具/在线课程系统/网课平台/视频教学系统/网上教学平台/网络教育系统pre { white-space: pre !important; word-wrap: …

今天依旧是基础知识内容

java基础知识内容 java的优势与特点简单性 面向对象 多线程 分布式 可移植性 高性能 安全性 健壮性 动态性java为什么能成功与时代契合 踩上了时代的洪流 满足了人们的需求 优势与特点无法替代java三大版本JavaME(嵌入…

2025年11月AI智能客服机器人品牌对比榜:五强资质认证与服务范围全梳理

2025年11月,企业正在把“降本增效”从口号变成可量化的KPI,客服中心首当其冲。电销线索转化率下滑、人工座席流失率居高不下、夜间咨询无人响应,这些痛点让“AI智能客服机器人”成为采购清单上的高频关键词。用户场…

pytorch汉字识别.

import os import random import numpy as np import matplotlib.pyplot as plt from PIL import Image, ImageDraw, ImageFont import torch import torch.nn as nn import torch.optim as optim from torch.utils.da…

汉字

import os import numpy as np import pandas as pd from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision i…

专业手机管理指南:使用Syncios移动管理器简化数据传输与备份

本文介绍Syncios移动管理器这款专业跨平台解决方案,能够帮助用户通过简单操作实现手机数据备份、恢复和跨设备传输,支持选择性数据管理,保障隐私安全,是手机数据管理的理想工具。像专业人士一样管理手机:使用Sync…

Russian Per GDP

So you are comparing the GDP of a zero-welfare society(USA) with a full-welfare society. A smart Russian just earn in the West but share the welfare of RF. ALSO, theres semi-welfare society.

2025年11月智能AI客服品牌推荐:综合实力排名榜

“双十一”后的客服高峰、年底会员续费潮、春节前的咨询井喷,企业客服中心在2025年第四季度普遍面临三大压力:人力缺口放大、咨询量峰值不可预测、客户对响应速度的容忍度继续下降。中国信通院《2025中国呼叫中心产业…

83windows 安装git 及git-lfs

# 1.安装 # 管理员进入PowerShell winget install Git.Git winget install GitHub.GitLFS# 验证安装是否成功 git --version git lfs version

近期小细节总结

串口并发调用 单个串口通讯(Modbus RTU也算),业务流程中的串口调用,既有定时轮询又有依次发送,也就是涉及到并发调用通讯的,不要犹豫,为通讯管理模块建立消息队列不用纠结锁的问题,天然线程安全定时任务和手动…

pytorch汉字识别

import os import random import numpy as np import matplotlib.pyplot as plt from PIL import Image, ImageDraw, ImageFont import torch import torch.nn as nn import torch.optim as optim from torch.utils.da…

2025年泵站闸门定制厂家权威推荐榜单:截流闸门/分流井闸门/截流井污水闸门源头厂家精选

在水利工程与市政排水系统中,泵站闸门作为控制水流、保障设施安全的关键设备,其质量与性能直接关系到整个系统的运行效率。 在水利工程、市政给排水、污水处理等领域,泵站闸门扮演着不可或缺的角色。据行业数据显示…