implementented generating backbone for first residue and the ghost residue

This commit is contained in:
Joel Wallace 2025-11-28 21:16:33 +00:00
parent 0df7dc4247
commit 312a2b875c

View File

@ -1,17 +1,67 @@
from backbone.ramachandran import RamachandranSampler
from rotamers.dunbrack import DunbrackRotamerLibrary
from geometry.backbone import GEO, ORI
from geometry.nerf import nerf
from protein.residue import ResidueName, Residue
rs = RamachandranSampler()
rl = DunbrackRotamerLibrary()
res_name = "PHE"
ghost_residue = Residue(ResidueName.GLY)
backbone_atoms = ["N", "CA", "C", "O"]
for atom in backbone_atoms:
ghost_residue.backbone["atoms"][atom] = ORI[atom]
print(f"Backbone torsion angles for {res_name}:")
phi, psi = rs.sample(res_name)
print(f"phi: {phi}, psi: {psi}")
print(" ")
primary_sequence = ["PHE", "SER", "THR"]
print(f"Sidechain rotamers for {res_name} (top 5):")
for rotamer in rl.rotamer_params(res_name, 100, 100)[:5]:
print(rotamer.p, rotamer.chis)
print(" ")
residues = [ ghost_residue ]
# First 2 residues of the sequence
for residue_index, residue_name in enumerate(primary_sequence[:2]):
residue = Residue(ResidueName(residue_name))
residue.backbone["phi"], residue.backbone["psi"] = rs.sample(residue.name.value)
residue.backbone["atoms"]["N"] = nerf(
residues[residue_index].backbone["atoms"]["N"],
residues[residue_index].backbone["atoms"]["CA"],
residues[residue_index].backbone["atoms"]["C"],
GEO["C_N_length"],
GEO["CA_C_N_angle"],
residues[residue_index].backbone["psi"],
)
residue.backbone["atoms"]["CA"] = nerf(
residues[residue_index].backbone["atoms"]["CA"],
residues[residue_index].backbone["atoms"]["C"],
residue.backbone["atoms"]["N"],
GEO["N_CA_length"],
GEO["C_N_CA_angle"],
180,
)
residue.backbone["atoms"]["C"] = nerf(
residues[residue_index].backbone["atoms"]["C"],
residue.backbone["atoms"]["N"],
residue.backbone["atoms"]["CA"],
GEO["CA_C_length"],
GEO["N_CA_C_angle"],
residue.backbone["phi"],
)
residue.backbone["atoms"]["O"] = nerf(
residue.backbone["atoms"]["N"],
residue.backbone["atoms"]["CA"],
residue.backbone["atoms"]["C"],
GEO["C_O_length"],
GEO["CA_C_O_angle"],
residue.backbone["psi"] + 180,
)
residues.append(residue)
residue.sidechain["chis"] = rl.rotamer_params(residue.name.value, residue.backbone["phi"], residue.backbone["psi"])
print(residue.summary())
# Generate a tripeptide backbone
# Populate the sidechain of the middle residue