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 backbone.ramachandran import RamachandranSampler
from rotamers.dunbrack import DunbrackRotamerLibrary from rotamers.dunbrack import DunbrackRotamerLibrary
from geometry.backbone import GEO, ORI
from geometry.nerf import nerf
from protein.residue import ResidueName, Residue
rs = RamachandranSampler() rs = RamachandranSampler()
rl = DunbrackRotamerLibrary() 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}:") primary_sequence = ["PHE", "SER", "THR"]
phi, psi = rs.sample(res_name)
print(f"phi: {phi}, psi: {psi}")
print(" ")
print(f"Sidechain rotamers for {res_name} (top 5):") residues = [ ghost_residue ]
for rotamer in rl.rotamer_params(res_name, 100, 100)[:5]:
print(rotamer.p, rotamer.chis) # First 2 residues of the sequence
print(" ") 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