使用PfamScan的API对蛋白结构域进行注释

0. PfamScan简介:

PfamScan是根据Pfam HMM对蛋白质序列进行蛋白家族及结构域的注释的一个工具。
网页端:https://www.ebi.ac.uk/Tools/pfa/pfamscan/
本地版:ftp://ftp.ebi.ac.uk/pub/databases/Pfam/Tools/

注:因为我只是临时用一下,希望能较快地出结果,所以没有去安装本地版,而是调用了PfamScan提供的REST API,所以本文记录的是调用API来运行PfamScan的过程。

1. PfamScan的API下载:

URL: https://www.ebi.ac.uk/seqdb/confluence/display/JDSAT/PfamScan+Help+and+Documentation#PfamScanHelpandDocumentation-WebServices
在这里插入图片描述
下载pfamscan.py即可,但是运行前要先安装xmltramp2模块(pip install xmltramp2)

2. 运行PfamScan:

运行命令:

python pfamscan.py --email "xxxxx@gmail.com" --database pfam-a --sequence targetSeqs.fasta --evalue 50 --format txt --outfile targetResult

参数含义可通过python pfamscan.py --help进行查看。
此处的--email --database --sequence是必须的参数(--email可以用谷歌邮箱,其他邮箱没尝试过)。

需要注意的是:输入文件(targetSeq.fasta)中序列数目不能超过100条。

运行结果:

运行结束后会生成三个文件:
targetResult.out.txt
targetResult.sequence.txt
targetResult.submission.params

其中targetResult.out.txt就是所需的输出文件(格式如下图所示)
在这里插入图片描述
列名注释:
Seq id : 蛋白/基因的编号
Alignment start : 基因/蛋白序列比对的结构域起始位置
Alignment end : 基因/蛋白序列比对的结构域终止位置
Envelope start : HMM 模型预测的基因/蛋白序列的结构域起始位置
Envelope end : HMM 模型预测的基因/蛋白序列的结构域终止位置
Hmm acc: 基因/蛋白序列对应结构的模型在Pfam中的编号
Hmm name : 基因/蛋白序列对应结构的模型在Pfam中的名称
Type: 基因/蛋白序列匹配到 Pfam 数据库中对应结构的分类水平,蛋白家族或者结构域
Hmm start: 比对上的部分在数据库匹配序列上的起始位置
Hmm end : 比对上的部分在数据库匹配序列上的终止位置
Hmm length:比对上的长度
Bit score:根据比对和 HMM 模型得出的基因/蛋白序列结构的评分,打分越高,可信度越高
E-value:比对的 E值(E值越小,可信度越高)
Significance: 基因/蛋白序列在数据库中匹配结构的数目
Clan : Pfam 数据库中按照蛋白质序列,结构以及 HMM 文件而分成的类群

3. 批量提交蛋白序列

import os
from Bio import SeqIO
import time


def runPfamScan(inFasta, outFile, email="xxx@gmail.com"):
    """
        inFasta中序列数目 <= 100
    """
    cmd = 'python pfamscan.py --email '+email+' --database pfam-a --sequence '+inFasta+' --evalue 50 --format txt --outfile '+outFile
    os.system(cmd)


def splitFasta(infile, threshold=100):
    """
       将fasta文件中的序列拆分成多个fasta文件,每个fasta文件中的序列数目<=100
       threshold: 拆分完的fasta文件中蛋白序列的数目的阈值,默认为100
    """
    id_list, seq_list = [], []
    for record in SeqIO.parse(infile, "fasta"):
        id_list.append(str(record.id))
        seq_list.append(str(record.seq))

    for i in range(0, len(id_list), threshold):
        if i+threshold <= len(id_list):
            outF = open("/".join(infile.split("/")[0:-1])+"/part_"+infile.split("/")[-1].split(".")[0]+"_"+str(i+1)+"_"+str(i+threshold)+".fasta", "w")
            for j in range(i, i+threshold):
                outF.write(">%s\n%s\n" % (id_list[j], seq_list[j]))
            outF.close()
        else:
            outF = open("/".join(infile.split("/")[0:-1])+"/part_"+infile.split("/")[-1].split(".")[0]+"_"+str(i+1)+"_"+str(len(id_list))+".fasta", "w")
            for k in range(i, len(id_list)):
                outF.write(">%s\n%s\n" % (id_list[k], seq_list[k]))
            outF.close()

def main():
	print("Start: ", time.ctime(), flush=True)
    SplitFasta(infile) ## 输入的fasta文件
    f_list = ["/".join(infile.split("/")[0:-1])+f for f in os.listdir("/".join(infile.split("/")[0:-1])) if f.startswith("part_virus")] ## SplitFasta()输出的结果
    for f in f_list:
        runPfamScan(inFasta = vf,
                    outFile = "./results/"+f.split("/")[-1].split(".")[0]) ## 结果保存在result目录下 (可以手动指定其他的目录)
    print("End: ", time.ctime(), flush=True)

if __name__ == "__main__":
	main()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值