import gradio as gr from igfold import IgFoldRunner import os import random import base64 def read_mol(molpath): with open(molpath, "r") as fp: lines = fp.readlines() mol = "" for l in lines: mol += l return mol def molecule(input_pdb): mol = read_mol(input_pdb) byte_content = mol.encode('utf-8') base64_content = base64.b64encode(byte_content).decode('utf-8') x = ( """
""" ) return f""" Download File """ def validate(seq): alphabet = set('ACDEFGHIKLMNPQRSTVWY') leftover = set(seq.upper()) - alphabet return not leftover def pred_seq(h_seq, l_seq): h_seq = h_seq.upper().replace(' ', '') l_seq = l_seq.upper().replace(' ', '') print(h_seq) print(l_seq) h_is_valid = validate(h_seq) l_is_valid = validate(l_seq) if h_is_valid and l_is_valid: sequences = { "H": h_seq, "L": l_seq } f_name = ''.join([random.choice("ACDEFGHIKLMNPQRSTVWY") for _ in range(15)]) pred_pdb = f"{f_name}.pdb" igfold = IgFoldRunner() igfold.fold( pred_pdb, sequences=sequences, do_refine=False, do_renum=False, ) html = molecule(pred_pdb) else: html = "ERROR! Not valid sequence
" return (html) h_chain_example = "EVQLVQSGPEVKKPGTSVKVSCKASGFTFMSSAVQWVRQARGQRLEWIGWIVIGSGNTNYAQKFQERVTITRDMSTSTAYMELSSLRSEDTAVYYCAAPYCSSISCNDGFDIWGQGTMVTVS" l_chain_example = "DVVMTQTPFSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIK" inputs = [gr.Textbox(lines=5, label="Heavy chain"), gr.Textbox(lines=5, label="Light chain") ] iface = gr.Interface(fn=pred_seq, inputs=inputs, outputs=gr.HTML(), title="Antibody structure prediction") iface.launch()