Compare commits
6 Commits
f4f672d514
...
2bab035cbc
| Author | SHA1 | Date | |
|---|---|---|---|
| 2bab035cbc | |||
| 33c10efe62 | |||
| a37e07998c | |||
| 6af9e40f77 | |||
| 312a2b875c | |||
| 0df7dc4247 |
|
|
@ -1,23 +1,25 @@
|
||||||
|
import numpy as np
|
||||||
# Ideal geometry. Angstroms for lengths, degrees for angles.
|
# Ideal geometry. Angstroms for lengths, degrees for angles. Engh & Huber parameters
|
||||||
GEO = {
|
GEO = {
|
||||||
'N_CA_len': 1.46,
|
'N_CA_length': 1.46,
|
||||||
'CA_C_len': 1.51,
|
'CA_C_length': 1.51,
|
||||||
'C_N_len': 1.33,
|
'C_N_length': 1.33,
|
||||||
'N_H_len': 1.01,
|
'N_H_length': 1.01,
|
||||||
|
'C_O_length': 1.23,
|
||||||
|
|
||||||
'N_CA_C_angle': 111.0,
|
'N_CA_C_angle': 111.0,
|
||||||
'CA_C_N_angle': 116.0,
|
'CA_C_N_angle': 116.0,
|
||||||
'C_N_CA_angle': 122.0,
|
'C_N_CA_angle': 122.0,
|
||||||
'C_N_H_angle': 119.0,
|
'C_N_H_angle': 119.0,
|
||||||
|
'CA_C_O_angle': 121.0,
|
||||||
}
|
}
|
||||||
|
|
||||||
# First residue backbone hardcoded. From 6G4A MET1
|
# First residue backbone hardcoded. From 6G4A MET1
|
||||||
ORI = {
|
ORI = {
|
||||||
'N': [ -17.396, -12.153, -13.987 ],
|
'N': np.array([ -17.396, -12.153, -13.987 ]),
|
||||||
'CA': [ -16.295, -12.486, -13.259 ],
|
'CA': np.array([ -16.295, -12.486, -13.259 ]),
|
||||||
'C': [ -16.534, -10.993, -13.428 ],
|
'C': np.array([ -16.534, -10.993, -13.428 ]),
|
||||||
'O': [ -16.891, -10.572, -14.520 ],
|
'O': np.array([ -16.891, -10.572, -14.520 ]),
|
||||||
}
|
}
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
8
src/geometry/sidechain.py
Normal file
8
src/geometry/sidechain.py
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
GEO = {
|
||||||
|
'CA_CB_length': 1.53,
|
||||||
|
|
||||||
|
'N_CA_CB_angle': 109.5,
|
||||||
|
'C_CA_CB_angle': 109.5,
|
||||||
|
|
||||||
|
'L_torsion': 122.55
|
||||||
|
}
|
||||||
|
|
@ -29,12 +29,15 @@ class Residue():
|
||||||
self.name = name
|
self.name = name
|
||||||
|
|
||||||
self.backbone = {
|
self.backbone = {
|
||||||
atoms: { "N": None, "CA": None, "C": None, "O": None },
|
"atoms": { "N": None, "CA": None, "C": None, "O": None },
|
||||||
phi: None,
|
"phi": None,
|
||||||
psi: None
|
"psi": None
|
||||||
}
|
}
|
||||||
|
|
||||||
self.sidechain = {
|
self.sidechain = {
|
||||||
atoms: {},
|
"atoms": {},
|
||||||
chis: []
|
"chis": []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def summary(self):
|
||||||
|
return f"ResidueName: {self.name.value}"
|
||||||
|
|
|
||||||
70
src/test.py
70
src/test.py
|
|
@ -1,17 +1,69 @@
|
||||||
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 as BACKBONE_GEO, ORI
|
||||||
|
from geometry.sidechain import GEO as SIDECHAIN_GEO
|
||||||
|
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"],
|
||||||
|
BACKBONE_GEO["C_N_length"],
|
||||||
|
BACKBONE_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"],
|
||||||
|
BACKBONE_GEO["N_CA_length"],
|
||||||
|
BACKBONE_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"],
|
||||||
|
BACKBONE_GEO["CA_C_length"],
|
||||||
|
BACKBONE_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"],
|
||||||
|
BACKBONE_GEO["C_O_length"],
|
||||||
|
BACKBONE_GEO["CA_C_O_angle"],
|
||||||
|
residue.backbone["psi"] + 180,
|
||||||
|
)
|
||||||
|
|
||||||
|
residue.sidechain
|
||||||
|
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
|
||||||
Loading…
Reference in New Issue
Block a user