# NCAA attached at two points

4 posts / 0 new
NCAA attached at two points
#1

Hello,

I am trying to parameterize an NCAA which is a result of cyclization of the backbone, rather than just a PTM of an R group. I am using the molfile_to_params_polymer.py script (BTW is there a python 3 version of this script?)

The connection points are at the R group of one residue, though there is a break in the chain (C=O -> C-OH) then a connection point to the nitrogen backbone atom of the subsequent residue.

When I use fixbb to modify to this residue I am getting the error:

ERROR: In ICOOR atom line in topology file: ./GYS.params; reference atoms must be specified in earlier line.  Missing N or LOWER or O

I've attached the molfile and params files below. Please let me know if there is a way to add some lines to the params to indicate this connection.

AttachmentSize
4.4 KB
4.48 KB
Post Situation:
Wed, 2021-06-16 15:20
tsztain

I got really frustrated with pain to pipeline molfile_to_params, the fact it runs python2 and RDKit (which I was using) dislikes Mol2 files. As a result I wrote my own, (pip released as rdkit-to-params, rudimentary web app) which has got to the point of being rather too complex with functionality, but works differently.

ERROR: Can't add atom named  CA  to ResidueType  as it already has one with that name.

As there are two CA atoms.

This is also wrong, but I am not sure what app cares:

FIRST_SIDECHAIN_ATOM  CA

SO are you hoping to have a single epsilon amino acid? I am not sure that can work as GAMMA_AA is the largest. Did you see this being done somewhere?

It might work better to add three residues

• a glycine-like with a CONN3 on the N atom
• a serine-like with a virtual atom named O and a CONN3 on its CA atom
• tyrosine is without the HA+HB atoms... I am sure there is a dehydroalanine is the database, so it must be fine

although constraints may be required to enforce planarity as the chromophore gets oxidised to be matured. But then importing the pose would be a nightmare. Do PDB files have the GFP chromophore as 3 residues with atoms missing or a single HETATM residue? if the latter, is the numbering continuous? I think I have only looked at the ancient 1GFL, which is likely non-standard nowadays.

Fri, 2021-06-18 03:35
matteoferla

Thanks so much for your response!!

I thought about adding the 3 residues, but then wasnt sure how to indicate the covalent bonds between them, maybe there is a way to modify the params file by hand? Though that doesn't seem fun.

I wouln't call it an epsilon amino acid though I am obviously having a hard time figuring out how to describe it! Working with PDB ID 2wur which has has GYS as one HETATM. I added NME and ACE caps in avogadro and saved as a mol file which I previously attached.

I'm sure this chromophore has been parameterized before since GFP is a very common protein to work with. In fact, this paper mentions it but provides few methodological details and no files: https://www.nature.com/articles/nature17995

I was actually trying to reproduce their method S6.2 which uses PDB ID 2wur so I should probably contact them next.

Fri, 2021-06-18 09:44
tsztain

Emailing always works. There is also the option that the premade PDB component was loaded... hence why it is not mentioned.

If you run rosetta without the flag load_PDB_components=False (True by default), it will load PDB components. Doing the following in Pyrosetta I get the attached figures.

import pyrosetta
pyrosetta.init() # going full vanilla. verbose with no logging. and load_PDB_components=True
pose = pyrosetta.pose_from_file(filename)
# not pose = pyrosetta.toolbox.rcsb.pose_from_rcsb(...) which strips every hetatm for safety.

# have a gander
import nglview as nv
view = nv.show_rosetta(pose)
view.clear_representations()
view.center('GYS')
view # (jupyter notebook)

# what is it?
rts = pose.residue_type_set_for_pose()
# or rts = pose.conformation().residue_type_set_for_conf()
gys = rts.name_map('pdb_GYS')
print(gys)
# pdb_GYS (GYS, Z):
# Base: GYS
#  Properties: POLYMER PROTEIN L_AA
#  Variant types:
#  Main-chain atoms: N CA1 C1 N3 CA3 C
#  Backbone atoms:
#  Side-chain atoms: N OG1 CB1 CA1 C1 N2 N3 C2 O2 CA2 CA3 CB2 CG2 CD1 CD2 CE1 CE2 CZ OH C O H HG1 HB11 HB12 HA1 HA31 HA32 HB2 HD1 HD2 HE1 HE2 HOH

# lets play with it
pose = pyrosetta.Pose()
gys_residue = pyrosetta.rosetta.core.conformation.ResidueFactory.create_residue( rts.name_map( 'pdb_GYS' ) )
pose.append_residue_by_jump(gys_residue, 1)
# Do something:
scorefxn = pyrosetta.create_score_function('ref2015_cart')
cycles = 3
relax = pyrosetta.rosetta.protocols.relax.FastRelax(scorefxn, cycles)
relax.minimize_bond_angles(True)
relax.minimize_bond_lengths(True)
relax.cartesian(True)
copy = pose.clone()
relax.apply(copy) # ERROR: ResidueType pdb_GYS does not have an atom CA

First figure --> The residue is polymeric, but is highly weird —and without any bond order.
Unfortunately, I do not know how to dump a residue_type object to a params file...
Second figure --> It's ideal structure as seen when loaded has a weird bonding. If a mover touches it it will explode or in the case of cartesian relax, dislike the lack of CA atom.
Regular relax is fine with it —but lots of nan are generated.

So it works, but is highly dangerous and prone to crash or explode or secretly play havok, which is worse.

File attachments:
Sat, 2021-06-19 03:07
matteoferla