| from einops import rearrange | |
| from igfold import IgFoldInput | |
| from igfold.utils.folding import get_sequence_dict, process_template | |
| def embed( | |
| antiberty, | |
| model, | |
| fasta_file=None, | |
| sequences=None, | |
| template_pdb=None, | |
| ignore_cdrs=None, | |
| ignore_chain=None, | |
| mask=None, | |
| ): | |
| seq_dict = get_sequence_dict( | |
| sequences, | |
| fasta_file, | |
| ) | |
| embeddings, attentions = antiberty.embed( | |
| seq_dict.values(), | |
| return_attention=True, | |
| ) | |
| embeddings = [e[1:-1].unsqueeze(0) for e in embeddings] | |
| attentions = [a[:, :, 1:-1, 1:-1].unsqueeze(0) for a in attentions] | |
| temp_coords, temp_mask = process_template( | |
| template_pdb, | |
| fasta_file, | |
| ignore_cdrs=ignore_cdrs, | |
| ignore_chain=ignore_chain, | |
| ) | |
| model_in = IgFoldInput( | |
| embeddings=embeddings, | |
| attentions=attentions, | |
| template_coords=temp_coords, | |
| template_mask=temp_mask, | |
| return_embeddings=True, | |
| batch_mask=mask, | |
| ) | |
| model_out = model(model_in) | |
| prmsd = rearrange( | |
| model_out.prmsd, | |
| "b (l a) -> b l a", | |
| a=4, | |
| ) | |
| model_out.prmsd = prmsd | |
| return model_out |