You are here

interaction energies between atoms

4 posts / 0 new
Last post
interaction energies between atoms
#1

Hi All!

I would like to load a protein structure together with a ligand. Subsequently, I want to get the interaction energy values (e.g., fa_atr, fa_rep,...) between all protein residues and each ligand atom or a subset of ligand atoms. Herewith, I want to decompose the ligand to analyze certain amino acid - ligand atom interactions.

How is it possible to calculate an emap that contains vectors for residue x ligand atom pairs?

Thank you very much for your help and any suggestions!

This works:
scorefxn = create_score_function('standard')
emap = core.scoring.EMapVector()
rsd1=p.residue(520)
rsd2=p.residue(509)
scorefxn.eval_ci_2b(rsd1,rsd2,p,emap)
print emap[fa_sol]

The following code does not work because scorefxn.eval_ci_2b expect two residues and not a atom and a residue:
scorefxn = create_score_function('standard')
emap = core.scoring.EMapVector()
rsd2=p.residue(509)
atom=p.residue(520).atom(5)
scorefxn.eval_ci_2b(atom,rsd2,p,emap)

Post Situation: 
Thu, 2011-04-14 06:15
Stefan

I am making wild guesses at some of the function names here:


scorefxn(pose) #score the pose
for each EnergyEdge in pose.energies().EnergyGraph: #iterate through the energy graph
#check if this is a protein-ligand edge - by differing chain or some other criterion
if pose.conformation().chain(EnergyEdge.upstream_residue_num) != pose.conformation().chain(EnergyEdge.downstream_residue_num)
print energy stuff

Thu, 2011-04-14 06:58
smlewis

You can certainly get the per-residue or residue/residue energy breakdown, but I haven't seen a way to get a per-atom energy breakdown with Rosetta.

Rosetta's really set up to do everything on a per-residue basis. The internal data structures which accumulate and store the energies only go down to the granularity of residues (with some sub-residue granularity, like backbone versus sidechain). It varies somewhat based on which energy term you're talking about, but, in general, the functions which calculate the energies loop over all the atoms in the residues - there isn't normally a separate function to handle atom-atom energies.

If you're just interested in fa_atr and fa_rep, you may be able to get something from core::scoring::etable::EtableEnergy::atom_pair_energy() and similar functions (name from C++, so that should be something like core.scoring.etable.EtableEnergy.atom_pair_energy() in Python), but those are templated and overloaded functions primarily intended for internal use by the fa_atr/fa_rep calculation code, so I don't know if they're exposed to PyRosetta in any meaningful/useful way.

As an alternative, if you're just scoring and not doing any sort of minimization/optimization, you may be able to get away with replacing the ligand with a smaller ligand with which you want the interaction energy. For example, if you're interested in the interactions with a carboxylate, replace the entire ligand with just an acetate or a formate at the coordinates of the carboxylate. If the energy terms you're dealing with are atom pairwise decomposable, protein-ligand carboxylate interaction energies should be about the same (modulo an extra hydrogen or so) to the energies for just the formate/acetate.

Thu, 2011-04-14 09:28
rmoretti

You are correct that none of the stored Energy-whatever objects store per-atom energies, only per-residue. I'd missed the need for that distinction.

Thu, 2011-04-14 11:31
smlewis