DELPHI/predict.py代码解读

import numpy as np
import os
import logging
import datetime
from keras.models import load_model
import time
import argparse

WINDOW_SIZE=31

def Predict(args, test_all_features_np3D):
    log_time("Start predicting")
    if not os.path.exists(args.out_dir):
        os.makedirs(args.out_dir) #如果args.out_dir这个路径不存在则创建一个args.out_dir的目录
    if (args.cpu == 1):
        log_time("using the CPU model")
        model = load_model("models/DELPHI_cpu.h5")
    elif (args.cpu == 0):
        log_time("using the GPU model")
        model = load_model("models/DELPHI_gpu.h5")
    else:
        print("{Error]: invalid option! -c can be either 1:cpu or 0:gpu")
        exit(1)
    log_time("Start predicting...")
    y_pred_testing = model.predict(test_all_features_np3D, batch_size=1024).ravel()  #不产生源数据的副本将数组转为1D

    # 再次输入蛋白质并输出预测值
    start_index = 0
    fin = open(args.input_fn, "r")
    while True:
        line_PID = fin.readline()[1:].rstrip('\n').rstrip(' ')
        line_Pseq = fin.readline().rstrip('\n').rstrip(' ')
        if not line_Pseq:
            break
        if (len(line_Pseq) < 32):
            print("The input sequence is shorter than 32. ", line_PID)
            exit(1)
        fout = open(args.out_dir+"/"+line_PID.upper()+".txt", "w")
        fout.write("# Prediction results by DELPHI\n")
        fout.write("# Output columns:\n")
        fout.write("# Index: the position of the residue in the input sequence, starting from 1\n")
        fout.write("# Residue: the amino acid residue at the position 'index', represented using 1-letter code\n")
        fout.write("# DELPHI prediction value: the DELPHI prediction value for the residue at the position 'index'.\n")
        fout.write("# [Index]\t[Residue]\t[DELPHI prediction value]\n")
        for i in range(len(line_Pseq)):
            fout.write(str(i + 1) + "\t" + line_Pseq[i] + "\t" + str(y_pred_testing[start_index + i]) + "\n")
        fout.close()
        start_index += len(line_Pseq)
    fin.close()
    log_time("End predicting")


def GetProgramArguments():
    logging.info("Parsing program arguments...")
    #信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
    parser = argparse.ArgumentParser(description='predict.py')
    #直接在命令行中就可以向程序中传入参数并让程序运行,直接通过命令输入predict.py
    parser._action_groups.pop()

    # required arguments
    required = parser.add_argument_group('required arguments')
    required.add_argument('-i', '--input_fn', type=str, required=True,
                          help='str: input protein sequences. In fasta format')
    required.add_argument('-o', '--out_dir', type=str, required=True,
                          help='str: output directory')
    required.add_argument('-d', '--tmp_dir', type=str, required=True,
                          help='str: temporary  directory to store all features. Will be deleted at the end of the program')

    # optional arguments
    optional = parser.add_argument_group('optional arguments')
    optional.add_argument('-c', '--cpu', type=int, default=1,
                          help='int: use cpu or gpu. 1: cpu; 0: gpu. Default: 1')
    return parser

def log_time(prefix):
    ts = time.time()# 获取当前时间戳
    st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')#将时间戳转为日期
    logging.info("%s: %s", prefix, st)#信息详细程度仅次于DEBUG,通常只记录关键节点信息,确保

# dim: 分隔符
def get_array_of_float_from_a_line(line, dim):
    res = []
    line = line.rstrip('\n').rstrip(' ').split(dim)
    # print (line)
    res += [float(i) for i in line]
    return res

#加载特征并且写入字典
def Read1DFeature(input_fn, dict):
    fin = open(input_fn, "r")
    while True:
        line_PID = fin.readline().rstrip('\n').rstrip(' ')
        line_Pseq = fin.readline().rstrip('\n').rstrip(' ')
        line_feature = fin.readline().rstrip('\n').rstrip(' ')
        if not line_feature:
            break
        dict[line_PID] = get_array_of_float_from_a_line(line_feature, ',')

# 加载每个特征的字典
def LoadFeatures(args):
    log_time("Loading feature ECO")
    Read1DFeature(args.tmp_dir+"/ECO.txt", ECO_test_dic)
    log_time("Loading feature RAA")
    Read1DFeature(args.tmp_dir+"/RAA.txt", RAA_test_dic)
    log_time("Loading feature RSA")
    Read1DFeature(args.tmp_dir+"/RSA.txt", RSA_test_dic)
    log_time("Loading feature Anchor")
    Read1DFeature(args.tmp_dir+"/Anchor.txt", Anchor_test_dic)
    log_time("Loading feature HYD")
    Read1DFeature(args.tmp_dir+"/HYD.txt", HYD_test_dic)
    log_time("Loading feature PKA")
    Read1DFeature(args.tmp_dir+"/PKA.txt", PKA_test_dic)
    log_time("Loading feature Pro2Vec_1D")
    Read1DFeature(args.tmp_dir+"/Pro2Vec_1D.txt", Pro2Vec_1D_test_dic)
    log_time("Loading feature HSP")
    Read1DFeature(args.tmp_dir+"/HSP.txt", HSP_test_dic)
    log_time("Loading feature POSITION")
    Read1DFeature(args.tmp_dir+"/POSITION.txt", POSITION_test_dic)

    log_time("Loading feature PHY_Char")#Hydropathy index的特征数量为3
    Read1DFeature(args.tmp_dir+"/PHY_Char1.txt", PHY_Char_test_dic_1)
    Read1DFeature(args.tmp_dir+"/PHY_Char2.txt", PHY_Char_test_dic_2)
    Read1DFeature(args.tmp_dir+"/PHY_Char3.txt", PHY_Char_test_dic_3)

    log_time("Loading feature PHY_Prop")#Physical properties为7维
    Read1DFeature(args.tmp_dir+"/PHY_Prop1.txt", PHY_Prop_test_dic_1)
    Read1DFeature(args.tmp_dir+"/PHY_Prop2.txt", PHY_Prop_test_dic_2)
    Read1DFeature(args.tmp_dir+"/PHY_Prop3.txt", PHY_Prop_test_dic_3)
    Read1DFeature(args.tmp_dir+"/PHY_Prop4.txt", PHY_Prop_test_dic_4)
    Read1DFeature(args.tmp_dir+"/PHY_Prop5.txt", PHY_Prop_test_dic_5)
    Read1DFeature(args.tmp_dir+"/PHY_Prop6.txt", PHY_Prop_test_dic_6)
    Read1DFeature(args.tmp_dir+"/PHY_Prop7.txt", PHY_Prop_test_dic_7)

    log_time("Loading feature PSSM")#PSSM的维度为20维,所以读取的字典数为20。
    Read1DFeature(args.tmp_dir+"/PSSM1.txt", PSSM_test_dic_1)
    Read1DFeature(args.tmp_dir+"/PSSM2.txt", PSSM_test_dic_2)
    Read1DFeature(args.tmp_dir+"/PSSM3.txt", PSSM_test_dic_3)
    Read1DFeature(args.tmp_dir+"/PSSM4.txt", PSSM_test_dic_4)
    Read1DFeature(args.tmp_dir+"/PSSM5.txt", PSSM_test_dic_5)
    Read1DFeature(args.tmp_dir+"/PSSM6.txt", PSSM_test_dic_6)
    Read1DFeature(args.tmp_dir+"/PSSM7.txt", PSSM_test_dic_7)
    Read1DFeature(args.tmp_dir+"/PSSM8.txt", PSSM_test_dic_8)
    Read1DFeature(args.tmp_dir+"/PSSM9.txt", PSSM_test_dic_9)
    Read1DFeature(args.tmp_dir+"/PSSM10.txt", PSSM_test_dic_10)
    Read1DFeature(args.tmp_dir+"/PSSM11.txt", PSSM_test_dic_11)
    Read1DFeature(args.tmp_dir+"/PSSM12.txt", PSSM_test_dic_12)
    Read1DFeature(args.tmp_dir+"/PSSM13.txt", PSSM_test_dic_13)
    Read1DFeature(args.tmp_dir+"/PSSM14.txt", PSSM_test_dic_14)
    Read1DFeature(args.tmp_dir+"/PSSM15.txt", PSSM_test_dic_15)
    Read1DFeature(args.tmp_dir+"/PSSM16.txt", PSSM_test_dic_16)
    Read1DFeature(args.tmp_dir+"/PSSM17.txt", PSSM_test_dic_17)
    Read1DFeature(args.tmp_dir+"/PSSM18.txt", PSSM_test_dic_18)
    Read1DFeature(args.tmp_dir+"/PSSM19.txt", PSSM_test_dic_19)
    Read1DFeature(args.tmp_dir+"/PSSM20.txt", PSSM_test_dic_20)

    log_time("Loading features done")

# 将一维列表分割成窗口大小。移动步长为1。对于序列的开始和结束,填充为0,如果长度小于15则在前面用0进行填充,如果大于15则在后面进行填充。
def Split1Dlist2NpArrays(args, inputList):
    list_1d_after_split = []
    win_size = WINDOW_SIZE
    assert (win_size < len(inputList))
    for x in range(len(inputList)):
        sta = (int)(x - (win_size - 1) / 2)
        end = (int)(x + (win_size - 1) / 2)
        if (sta < 0):
            # pad before
            assert (end >= 0)
            list_1d_after_split.extend([0] * abs(sta) + inputList[0:end + 1])
        elif (end >= len(inputList)):
            # pad after
            list_1d_after_split.extend(inputList[sta:len(inputList)] + [0] * (end - len(inputList) + 1))
        else:
            # normal
            list_1d_after_split.extend(inputList[sta:end + 1])
    return list_1d_after_split

# 分割输入2D列表,将输入的2维数组转换为二维数组
def Split2DList2NpArrays(args, input2DList):
    input2DList_after_split = []
    for input1DList in input2DList:
        input1DList_after_split = Split1Dlist2NpArrays(args, input1DList)
        input2DList_after_split.extend(input1DList_after_split)

    np_2d_array = np.asarray(input2DList_after_split)
    np_2d_array = np_2d_array.reshape(-1, WINDOW_SIZE) #列数固定长度为31,行数为样本是数量
    return np_2d_array

def Convert2DListTo3DNp(args, list2D):
    np_2d = Split2DList2NpArrays(args, list2D)
    np_3D = np_2d.reshape(np_2d.shape[0], np_2d.shape[1], 1) #最后1Dlist就变成3维的数组。
    return np_3D
#加载标签和特征的格式
def LoadLabelsAndFormatFeatures(args):
    ECO_2DList = []
    RAA_2DList = []
    RSA_2DList = []
    Pro2Vec_1D_2DList = []
    Anchor_2DList = []
    HSP_2DList = []
    HYD_2DList = []
    PKA_2DList = []
    POSITION_2DList = []
    PHY_Char_2DList_1 = []
    PHY_Char_2DList_2 = []
    PHY_Char_2DList_3 = []
    PHY_Prop_2DList_1 = []
    PHY_Prop_2DList_2 = []
    PHY_Prop_2DList_3 = []
    PHY_Prop_2DList_4 = []
    PHY_Prop_2DList_5 = []
    PHY_Prop_2DList_6 = []
    PHY_Prop_2DList_7 = []

    PSSM_2DList_1 = []
    PSSM_2DList_2 = []
    PSSM_2DList_3 = []
    PSSM_2DList_4 = []
    PSSM_2DList_5 = []
    PSSM_2DList_6 = []
    PSSM_2DList_7 = []
    PSSM_2DList_8 = []
    PSSM_2DList_9 = []
    PSSM_2DList_10 = []
    PSSM_2DList_11 = []
    PSSM_2DList_12 = []
    PSSM_2DList_13 = []
    PSSM_2DList_14 = []
    PSSM_2DList_15 = []
    PSSM_2DList_16 = []
    PSSM_2DList_17 = []
    PSSM_2DList_18 = []
    PSSM_2DList_19 = []
    PSSM_2DList_20 = []

    fin = open(args.input_fn, "r")
    while True:
        line_PID = fin.readline().rstrip('\n').rstrip(' ')
        line_Pseq = fin.readline().rstrip('\n').rstrip(' ')
        if not line_Pseq:
            break

        list1D_ECO = ECO_test_dic[line_PID]
        list1D_RAA = RAA_test_dic[line_PID]
        list1D_RSA = RSA_test_dic[line_PID]
        list1D_Pro2Vec_1D = Pro2Vec_1D_test_dic[line_PID]
        list1D_Anchor = Anchor_test_dic[line_PID]
        list1D_HSP = HSP_test_dic[line_PID]
        list1D_HYD = HYD_test_dic[line_PID]
        list1D_PKA = PKA_test_dic[line_PID]
        list1D_POSITION = POSITION_test_dic[line_PID]
        list1D_PHY_Char_1 = PHY_Char_test_dic_1[line_PID]
        list1D_PHY_Char_2 = PHY_Char_test_dic_2[line_PID]
        list1D_PHY_Char_3 = PHY_Char_test_dic_3[line_PID]
        list1D_PHY_Prop_1 = PHY_Prop_test_dic_1[line_PID]
        list1D_PHY_Prop_2 = PHY_Prop_test_dic_2[line_PID]
        list1D_PHY_Prop_3 = PHY_Prop_test_dic_3[line_PID]
        list1D_PHY_Prop_4 = PHY_Prop_test_dic_4[line_PID]
        list1D_PHY_Prop_5 = PHY_Prop_test_dic_5[line_PID]
        list1D_PHY_Prop_6 = PHY_Prop_test_dic_6[line_PID]
        list1D_PHY_Prop_7 = PHY_Prop_test_dic_7[line_PID]

        list1D_PSSM_1 = PSSM_test_dic_1[line_PID]
        list1D_PSSM_2 = PSSM_test_dic_2[line_PID]
        list1D_PSSM_3 = PSSM_test_dic_3[line_PID]
        list1D_PSSM_4 = PSSM_test_dic_4[line_PID]
        list1D_PSSM_5 = PSSM_test_dic_5[line_PID]
        list1D_PSSM_6 = PSSM_test_dic_6[line_PID]
        list1D_PSSM_7 = PSSM_test_dic_7[line_PID]
        list1D_PSSM_8 = PSSM_test_dic_8[line_PID]
        list1D_PSSM_9 = PSSM_test_dic_9[line_PID]
        list1D_PSSM_10 = PSSM_test_dic_10[line_PID]
        list1D_PSSM_11 = PSSM_test_dic_11[line_PID]
        list1D_PSSM_12 = PSSM_test_dic_12[line_PID]
        list1D_PSSM_13 = PSSM_test_dic_13[line_PID]
        list1D_PSSM_14 = PSSM_test_dic_14[line_PID]
        list1D_PSSM_15 = PSSM_test_dic_15[line_PID]
        list1D_PSSM_16 = PSSM_test_dic_16[line_PID]
        list1D_PSSM_17 = PSSM_test_dic_17[line_PID]
        list1D_PSSM_18 = PSSM_test_dic_18[line_PID]
        list1D_PSSM_19 = PSSM_test_dic_19[line_PID]
        list1D_PSSM_20 = PSSM_test_dic_20[line_PID]

        ECO_2DList.append(list1D_ECO)
        RAA_2DList.append(list1D_RAA)
        RSA_2DList.append(list1D_RSA)
        Pro2Vec_1D_2DList.append(list1D_Pro2Vec_1D)
        Anchor_2DList.append(list1D_Anchor)
        HSP_2DList.append(list1D_HSP)
        HYD_2DList.append(list1D_HYD)
        PKA_2DList.append(list1D_PKA)
        POSITION_2DList.append(list1D_POSITION)
        PHY_Char_2DList_1.append(list1D_PHY_Char_1)
        PHY_Char_2DList_2.append(list1D_PHY_Char_2)
        PHY_Char_2DList_3.append(list1D_PHY_Char_3)
        PHY_Prop_2DList_1.append(list1D_PHY_Prop_1)
        PHY_Prop_2DList_2.append(list1D_PHY_Prop_2)
        PHY_Prop_2DList_3.append(list1D_PHY_Prop_3)
        PHY_Prop_2DList_4.append(list1D_PHY_Prop_4)
        PHY_Prop_2DList_5.append(list1D_PHY_Prop_5)
        PHY_Prop_2DList_6.append(list1D_PHY_Prop_6)
        PHY_Prop_2DList_7.append(list1D_PHY_Prop_7)

        PSSM_2DList_1.append(list1D_PSSM_1)
        PSSM_2DList_2.append(list1D_PSSM_2)
        PSSM_2DList_3.append(list1D_PSSM_3)
        PSSM_2DList_4.append(list1D_PSSM_4)
        PSSM_2DList_5.append(list1D_PSSM_5)
        PSSM_2DList_6.append(list1D_PSSM_6)
        PSSM_2DList_7.append(list1D_PSSM_7)
        PSSM_2DList_8.append(list1D_PSSM_8)
        PSSM_2DList_9.append(list1D_PSSM_9)
        PSSM_2DList_10.append(list1D_PSSM_10)
        PSSM_2DList_11.append(list1D_PSSM_11)
        PSSM_2DList_12.append(list1D_PSSM_12)
        PSSM_2DList_13.append(list1D_PSSM_13)
        PSSM_2DList_14.append(list1D_PSSM_14)
        PSSM_2DList_15.append(list1D_PSSM_15)
        PSSM_2DList_16.append(list1D_PSSM_16)
        PSSM_2DList_17.append(list1D_PSSM_17)
        PSSM_2DList_18.append(list1D_PSSM_18)
        PSSM_2DList_19.append(list1D_PSSM_19)
        PSSM_2DList_20.append(list1D_PSSM_20)

    fin.close()

    ECO_3D_np = Convert2DListTo3DNp(args, ECO_2DList)
    RAA_3D_np = Convert2DListTo3DNp(args, RAA_2DList)
    RSA_3D_np = Convert2DListTo3DNp(args, RSA_2DList)
    Pro2Vec_1D_3D_np = Convert2DListTo3DNp(args, Pro2Vec_1D_2DList)
    Anchor_3D_np = Convert2DListTo3DNp(args, Anchor_2DList)
    HSP_3D_np = Convert2DListTo3DNp(args, HSP_2DList)
    HYD_3D_np = Convert2DListTo3DNp(args, HYD_2DList)
    PKA_3D_np = Convert2DListTo3DNp(args, PKA_2DList)
    POSITION_3D_np = Convert2DListTo3DNp(args, POSITION_2DList)
    PHY_Char_3D_np_1 = Convert2DListTo3DNp(args, PHY_Char_2DList_1)
    PHY_Char_3D_np_2 = Convert2DListTo3DNp(args, PHY_Char_2DList_2)
    PHY_Char_3D_np_3 = Convert2DListTo3DNp(args, PHY_Char_2DList_3)
    PHY_Prop_3D_np_1 = Convert2DListTo3DNp(args, PHY_Prop_2DList_1)
    PHY_Prop_3D_np_2 = Convert2DListTo3DNp(args, PHY_Prop_2DList_2)
    PHY_Prop_3D_np_3 = Convert2DListTo3DNp(args, PHY_Prop_2DList_3)
    PHY_Prop_3D_np_4 = Convert2DListTo3DNp(args, PHY_Prop_2DList_4)
    PHY_Prop_3D_np_5 = Convert2DListTo3DNp(args, PHY_Prop_2DList_5)
    PHY_Prop_3D_np_6 = Convert2DListTo3DNp(args, PHY_Prop_2DList_6)
    PHY_Prop_3D_np_7 = Convert2DListTo3DNp(args, PHY_Prop_2DList_7)

    PSSM_3D_np_1 = Convert2DListTo3DNp(args, PSSM_2DList_1)
    PSSM_3D_np_2 = Convert2DListTo3DNp(args, PSSM_2DList_2)
    PSSM_3D_np_3 = Convert2DListTo3DNp(args, PSSM_2DList_3)
    PSSM_3D_np_4 = Convert2DListTo3DNp(args, PSSM_2DList_4)
    PSSM_3D_np_5 = Convert2DListTo3DNp(args, PSSM_2DList_5)
    PSSM_3D_np_6 = Convert2DListTo3DNp(args, PSSM_2DList_6)
    PSSM_3D_np_7 = Convert2DListTo3DNp(args, PSSM_2DList_7)
    PSSM_3D_np_8 = Convert2DListTo3DNp(args, PSSM_2DList_8)
    PSSM_3D_np_9 = Convert2DListTo3DNp(args, PSSM_2DList_9)
    PSSM_3D_np_10 = Convert2DListTo3DNp(args, PSSM_2DList_10)
    PSSM_3D_np_11 = Convert2DListTo3DNp(args, PSSM_2DList_11)
    PSSM_3D_np_12 = Convert2DListTo3DNp(args, PSSM_2DList_12)
    PSSM_3D_np_13 = Convert2DListTo3DNp(args, PSSM_2DList_13)
    PSSM_3D_np_14 = Convert2DListTo3DNp(args, PSSM_2DList_14)
    PSSM_3D_np_15 = Convert2DListTo3DNp(args, PSSM_2DList_15)
    PSSM_3D_np_16 = Convert2DListTo3DNp(args, PSSM_2DList_16)
    PSSM_3D_np_17 = Convert2DListTo3DNp(args, PSSM_2DList_17)
    PSSM_3D_np_18 = Convert2DListTo3DNp(args, PSSM_2DList_18)
    PSSM_3D_np_19 = Convert2DListTo3DNp(args, PSSM_2DList_19)
    PSSM_3D_np_20 = Convert2DListTo3DNp(args, PSSM_2DList_20)

    assert (ECO_3D_np.shape == RAA_3D_np.shape == RSA_3D_np.shape == Anchor_3D_np.shape == HYD_3D_np.shape == PKA_3D_np.shape == PHY_Char_3D_np_1.shape == PHY_Char_3D_np_2.shape == PHY_Char_3D_np_3.shape == PHY_Prop_3D_np_1.shape == PHY_Prop_3D_np_2.shape == PHY_Prop_3D_np_3.shape == PHY_Prop_3D_np_4.shape == PHY_Prop_3D_np_5.shape == PHY_Prop_3D_np_6.shape  == PHY_Prop_3D_np_7.shape == Pro2Vec_1D_3D_np.shape == HSP_3D_np.shape == PSSM_3D_np_20.shape == PSSM_3D_np_19.shape == PSSM_3D_np_1.shape == POSITION_3D_np.shape)

    log_time("Assembling 12 features")
    #将得到的特征三维数组进行拼接
    all_features_3D_np = np.concatenate(
            (ECO_3D_np, RAA_3D_np, RSA_3D_np, Pro2Vec_1D_3D_np, Anchor_3D_np, HSP_3D_np, HYD_3D_np, PKA_3D_np, PHY_Char_3D_np_1, PHY_Char_3D_np_2, PHY_Char_3D_np_3, PHY_Prop_3D_np_1, PHY_Prop_3D_np_2, PHY_Prop_3D_np_3, PHY_Prop_3D_np_4, PHY_Prop_3D_np_5, PHY_Prop_3D_np_6, PHY_Prop_3D_np_7, PSSM_3D_np_1, PSSM_3D_np_2, PSSM_3D_np_3, PSSM_3D_np_4, PSSM_3D_np_5, PSSM_3D_np_6, PSSM_3D_np_7, PSSM_3D_np_8, PSSM_3D_np_9, PSSM_3D_np_10, PSSM_3D_np_11, PSSM_3D_np_12, PSSM_3D_np_13, PSSM_3D_np_14, PSSM_3D_np_15, PSSM_3D_np_16, PSSM_3D_np_17, PSSM_3D_np_18, PSSM_3D_np_19, PSSM_3D_np_20, POSITION_3D_np), axis=2)

    return all_features_3D_np

def main():
    logging.basicConfig(format='[%(levelname)s] line %(lineno)d: %(message)s', level='INFO') 
    #函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息
    log_time("Program started")
    parser = GetProgramArguments()
    args = parser.parse_args() #通过parser方法得到参数args
    print("program arguments are: ", args) #打印项目的参数
    LoadFeatures(args) #得到参数的特征
    test_all_features_np3D = LoadLabelsAndFormatFeatures(args) #调用LoadLabelsAndFormatFeatures得到3维的特征数组
    Predict(args, test_all_features_np3D) #进行训练
    log_time("Program ended")

CUR_DIR = os.path.dirname(os.path.realpath(__file__)) + "/"

#存储形状<3mer, np(1,1,100)的字典
Dict_3mer_to_100vec = {}
ECO_test_dic = {}
RAA_test_dic = {}
RSA_test_dic = {}
Pro2Vec_1D_test_dic = {}
Pro2Vec_embedding_test_dic = {}
Anchor_test_dic = {}
HSP_test_dic = {}
HYD_test_dic = {}
PKA_test_dic = {}
POSITION_test_dic = {}

PHY_Char_test_dic_1 = {}
PHY_Char_test_dic_2 = {}
PHY_Char_test_dic_3 = {}
PHY_Prop_test_dic_1 = {}
PHY_Prop_test_dic_2 = {}
PHY_Prop_test_dic_3 = {}
PHY_Prop_test_dic_4 = {}
PHY_Prop_test_dic_5 = {}
PHY_Prop_test_dic_6 = {}
PHY_Prop_test_dic_7 = {}

PSSM_test_dic_1 = {}
PSSM_test_dic_2 = {}
PSSM_test_dic_3 = {}
PSSM_test_dic_4 = {}
PSSM_test_dic_5 = {}
PSSM_test_dic_6 = {}
PSSM_test_dic_7 = {}
PSSM_test_dic_8 = {}
PSSM_test_dic_9 = {}
PSSM_test_dic_10 = {}
PSSM_test_dic_11 = {}
PSSM_test_dic_12 = {}
PSSM_test_dic_13 = {}
PSSM_test_dic_14 = {}
PSSM_test_dic_15 = {}
PSSM_test_dic_16 = {}
PSSM_test_dic_17 = {}
PSSM_test_dic_18 = {}
PSSM_test_dic_19 = {}
PSSM_test_dic_20 = {}

time_start = time.time()
time_end = time.time()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值