基于人工智能的多肽药物分析问题(二)

2021SC@SDUSC

基于人工智能的多肽药物分析问题(二)

2021SC@SDUSC

1、本周工作

分析rosettaFold的源码中前期准备部分

2、源码分析

2.1 Parsing arguments

利用python的argparse模块编写与程序运行相关的命令行选项、参数和子命令解析器。

argparse 模块可以让使用者轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

	parser = argparse.ArgumentParser(description="Error predictor network with predicted distogram",
                                     epilog="v0.0.1")
    parser.add_argument("distogram",
                        action="store",
                        help="predicted distogram (npz format, key for distogram should be 'dist')")
    parser.add_argument("infolder",
                        action="store",
                        help="input folder name full of decoy pdbs having same sequence or path to a single pdb")
    parser.add_argument("outfolder",
                        action="store", nargs=argparse.REMAINDER,
                        help="output folder name. If a pdb path is passed this needs to be a .npz file. Can also be empty. Default is current folder or pdbname.npz")
    parser.add_argument('-prefix', default=None, help='prefix for input pdbs')
    parser.add_argument('--roll', action="store_true", default=False, help="Roll predicted distogram or not [False], should be added if you use distogram from Trunk")
    parser.add_argument("--pdb",
                        "-pdb",
                        action="store_true",
                        default=False,
                        help="Running on a single pdb file instead of a folder (Default: False)")
    parser.add_argument("--leavetemp",
                        "-lt",
                        action="store_true",
                        default=False,
                        help="leaving temporary files (Default: False)")

argparse 模块使用流程

  1. 创建解析器,使用 argparse 的第一步是创建一个 ArgumentParser 对象。
ap= argparse.ArgumentParser(description='Process some integers.')
  1. 添加参数
ap.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
  1. 解析参数
ap.parse_args()
  1. 命令行调用py文件
# 例子
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

命令行调用方式:

python argparseU.py 1 2 3
输出 3 
python argparseU.py --sum 1 2 3
输出 6

经统计,该源码共添加了12个命令行参数,分别是:

distogram 
infolder 
outfolder 
-prefix
--roll 
-pdb 
--leavetemp 
--verbose
--process 
--gpu 
--featurize 
--reprocess 

各个参数的作用分别是:

  • distogram # 使用柱状图模式预测
  • infolder # 输入pdb数据集所在文件夹
  • outfolder # 设置输出文件夹的名字 若pdb路径,则需要 .npz文件
  • -prefix # 输入PDBS的前缀
  • –roll # 在使用Trunk的统计图时,添加Roll预测的统计图
  • -pdb # 单个pdb
  • –leavetemp # 删除临时文件 默认为False
  • –verbose # 详细标志
  • –process # 使用的cpu个数
  • –gpu # 使用gpu个数
  • –featurize # 只运行featurization
  • –reprocess # 重新处理特征文件

以上命令行参数作为前提,有助于后期命令行直接调用模型对蛋白质的结构进行预测

2.2 Checking file availabilities

该部分代码是用于检查文件的可用性

扫描二维码关注公众号,回复: 13279280 查看本文章
  1. 检查 --outfolder 参数所标识的文件的可用性
    if len(args.outfolder)>1:
        print(f"Only one output folder can be specified, but got {
      
      args.outfolder}", file=sys.stderr)
        return -1

    if len(args.outfolder)==0:
        args.outfolder = ""
    else:
        args.outfolder = args.outfolder[0]
  • 当输出文件夹数目大于1的时候抛出异常

  • 当文件数目为0的时候则为默认情况

  • 其余情况则采用第一个参数所示的值

  1. 检查 infolder参数
    if args.infolder.endswith('.pdb'):
        args.pdb = True
    
    if not args.pdb:
        if not isdir(args.infolder):
            print("Input folder does not exist.", file=sys.stderr)
            return -1
        
        #default is current folder
        if args.outfolder == "":
            args.outfolder='.'
        if not isdir(args.outfolder):
            print("Creating output folder:", args.outfolder)
            os.mkdir(args.outfolder)
    else:
        if not isfile(args.infolder):
            print("Input file does not exist.", file=sys.stderr)
            return -1
        
        #default is output name with extension changed to npz
        if args.outfolder == "":
            args.outfolder = os.path.splitext(args.infolder)[0]+".npz"

        if not(".pdb" in args.infolder and ".npz" in args.outfolder):
            print("Input needs to be in .pdb format, and output needs to be in .npz format.", file=sys.stderr)
            return -1

流程:

判断输入文件格式是否为pdb格式:

​ 是:

​ 判断文件是否存在,不是则中断执行,是则继续执行

​ 若输出文件为空,则为输出文件命名

​ 判断输出文件和出入文件的格式是否正确,是则正常执行,否则中断执行

​ 不是:

​ 判断是否为目录地址 是则继续执行 ,否则执行中断

​ 判断是否为当前目录 默认为当前目录

  1. 设置文件输出目录信息
    script_dir = os.path.dirname(__file__)
    base = os.path.join(script_dir, "models/")
    modelpath = base + "smTr"
        
    if not isdir(modelpath+"_rep1"):
        print("Model checkpoint does not exist", file=sys.stderr)
        return -1

3.总结

本文所示源码对调用该模型的命令行参数进行了设置,便于在后期使用命令行调用模型进行预测结构的时候可以动态调整模型所用到的各个参数,包括输入输出文件位置,使用cpu,gpu的个数以及是否采用柱状图表进行分析等等;

此外,该系统还对输入的文件格式进行了限制,当输入的文件参数不准确,或者输出文件目录参数不准确则会终止执行并给出用户相应的提示,保证了系统的稳健运行。

猜你喜欢

转载自blog.csdn.net/weixin_45774350/article/details/120642546