alibtsd's picture
Deploy FlowProt Docker Space
f34af6f verified
Raw
History Blame Contribute Delete
2.32 kB
import glob
import json
import random
import numpy as np
import pandas as pd
def softmax(x, T):
return np.exp(x / T) / np.sum(np.exp(x / T), -1, keepdims=True)
def parse_pssm(path):
data = pd.read_csv(path, skiprows=2)
floats_list_list = []
for i in range(data.values.shape[0]):
str1 = data.values[i][0][4:]
floats_list = []
for item in str1.split():
floats_list.append(float(item))
floats_list_list.append(floats_list)
np_lines = np.array(floats_list_list)
return np_lines
np_lines = parse_pssm(
"/home/swang523/RLcage/capsid/monomersfordesign/8-16-21/pssm_rainity_final_8-16-21_int/build_0.2089_0.98_0.4653_19_2.00_0.005745.pssm"
)
mpnn_alphabet = "ACDEFGHIKLMNPQRSTVWYX"
input_alphabet = "ARNDCQEGHILKMFPSTWYV"
permutation_matrix = np.zeros([20, 21])
for i in range(20):
letter1 = input_alphabet[i]
for j in range(21):
letter2 = mpnn_alphabet[j]
if letter1 == letter2:
permutation_matrix[i, j] = 1.0
pssm_log_odds = np_lines[:, :20] @ permutation_matrix
pssm_probs = np_lines[:, 20:40] @ permutation_matrix
X_mask = np.concatenate([np.zeros([1, 20]), np.ones([1, 1])], -1)
def softmax(x, T):
return np.exp(x / T) / np.sum(np.exp(x / T), -1, keepdims=True)
# Load parsed PDBs:
with open("/home/justas/projects/cages/parsed/test.jsonl", "r") as json_file:
json_list = list(json_file)
my_dict = {}
for json_str in json_list:
result = json.loads(json_str)
all_chain_list = [item[-1:] for item in list(result) if item[:9] == "seq_chain"]
pssm_dict = {}
for chain in all_chain_list:
pssm_dict[chain] = {}
pssm_dict[chain]["pssm_coef"] = (
np.ones(len(result["seq_chain_A"]))
).tolist() # a number between 0.0 and 1.0 specifying how much attention put to PSSM, can be adjusted later as a flag
pssm_dict[chain]["pssm_bias"] = (
softmax(pssm_log_odds - X_mask * 1e8, 1.0)
).tolist() # PSSM like, [length, 21] such that sum over the last dimension adds up to 1.0
pssm_dict[chain]["pssm_log_odds"] = (pssm_log_odds).tolist()
my_dict[result["name"]] = pssm_dict
# Write output to:
with open("/home/justas/projects/lab_github/mpnn/data/pssm_dict.jsonl", "w") as f:
f.write(json.dumps(my_dict) + "\n")