[MMTK] MMTK and missing atoms

Konrad Hinsen hinsen@cnrs-orleans.fr
22 Oct 2002 18:57:18 +0200


Sabine Beraud <sabine@nmr.clarku.edu> writes:

> In fact "how to fix those missing atom positions" was my intial
> question, since I need to have hydrogen positions (at least HN

I don't think there is a simple general solution for determining atom
positions. For hydrogens, MMTK uses an heuristic approach based on the
geometries of the possible surroundings, which are few in number. A
similar approach could be used for fixing other (isolated) missing
positions, but that would be a lot of work.

An approach that might work (but I didn't try) is to start from some
complete conformation for the same sidechain and deform it in a
reduced space corresponding to the lowest normal modes to make it fit
the PDB conformation as much as possible. One could then take the
missing positions from the deformed conformation and do some energy
minimization to improve the result. That would not be too big a job
(perhaps 100 Python lines), but it might not work well enough.

> positions on the backbone). As I need to scan a large number of
> proteins files (and about 1 file on 7 has missing atom(s)) fixing
> those missing atoms by hand (the only solution that I found untill
> now) will not be very efficient. Do you know a best solution?

If you only need the backbone hydrogens, you could do the following:

  for chain in protein:
      for residue in chain:
          chain.setBondAttributes()
          chain.peptide.findHydrogenPositions()
          chain.clearBondAttributes()

In principle I could modify the hydrogen algorithm to simply skip all
hydrogens whose positions it cannot determine due to other missing
positions, but that would mean rewriting much of it, so it won't
happen very soon.

Another solution is to assign fake positions to all the undefined
non-hydrogens:

   for atom in chain.atomList():
       if atom.position() is None and atom.symbol != 'H':
           atom.setPosition(Vector(42, 99, 113))
           atom.fake_position = 1
       else:
           atom.fake_position = 0
   chain.findHydrogenPositions()
   for atom in chain.atomList():
       if atom.fake_position:
           atom.setPosition(None)
           del atom.fake_position

The problem with this approach is that some of the hydrogen positions
might depend on the fake positions and thus become pretty random.

Konrad.
-- 
-------------------------------------------------------------------------------
Konrad Hinsen                            | E-Mail: hinsen@cnrs-orleans.fr
Centre de Biophysique Moleculaire (CNRS) | Tel.: +33-2.38.25.56.24
Rue Charles Sadron                       | Fax:  +33-2.38.63.15.17
45071 Orleans Cedex 2                    | Deutsch/Esperanto/English/
France                                   | Nederlands/Francais
-------------------------------------------------------------------------------