mmtk questions

Konrad Hinsen
Sat, 6 Sep 1997 18:57:01 +0200

> I was thinking this morning of something I would like from
> MMTK; event notification.  I'm not sure which events need
> notification or how to do it correctly.  Let me give some
> examples.

I had thought about that too when considering visualization. I'd
probably use the Model-View-Controller pattern popularized by
Smalltalk. But I deferred all details to the time when I will
implement visualization, and that might be never ;-)

>   This specific notification exists in VMD for just this reason.
> There are other terms which are not updated, and it makes for
> strange behaviour.  For example, I can color the system based
> on its beta value, and I can change the beta value by hand,
> but no event is available to force an automatic update of the
> display.  Thus, I have to press a button "Update" for VMD to
> recompute the new coloring.

That's one of the difficulties: there might be any number of
properties that can change. Worse, an MMTK application program might
change them directly without using MMTK functions; I guess I can't do
anything about that. I'd probably add event notification at the level
of universe variables (e.g. configurations); that seems sufficiently
general and also sufficiently low-level to catch all modifications
except malicious ones.

>   I would imagine that I register a callback for certain
> classes of events.  When I execute the user command, I
> would flag when specific events came back, and act on them
> after the user command has been completed.  (In that way,

But that requires another notification to indicat the command
is completed. At least in a multi-threading environment.

> As another example, suppose I've made a selection like "all atoms
> with 4 bonds and charge > 0.2".  I would like some way to keep
> that selection "active", so I need notification when certain
> properties change.  One way could be something like:
>   selection ='bonds > 4 && charge > 0.2');
>   for keyword in selection.keywords:
>     Protein.notify(selection, 'change', keyword)
> And have
>   class Selection:
>     def event(self, action, field):
>       # whatever is needed to regenerate the selection, eg.
>       new_selection = self.protein(self.selection_text)
>       self.__atoms = new_selection.atomList()

Well, MMTK does not use the concept of selection used e.g. in CHARMM;
what you use instead is collections, which can be constructed
according to any rule expressible as Python code. But they are static,
at least at the moment. But I see no problem in defining dynamic
collections by some rule (perhaps given as a filter function) and
having them receive notification for each event that influences that
filter function. It's not trivial, but doable...

> One that I added to VMD for the next release is a way to
> override the determination of the bond topology. This was
> done specifically to address someone's desired to visualize
> his dense fluid system where VMD tried to make nearby atoms
> bond to each other when they shouldn't.

I think I'll like that! I remember spending a lot of time to
get decent pictures of path integral simulations. About every
visualization programs would add bonds between the beads of each
path integral! I ended up using XMol with hand-edited input
files in Alchemy format...

>   I know MMTK doesn't suffer from this problem, given that
> it uses a residue library, but regardless, it does provide
> a mechanism for overriding any problems that might occur,
> like the questions I had yesterday about Zn fingers or heme.

That's not quite the same: in one case you want to eliminate
a bond, in the other case an energy term. The first would
require a change to MMTK's database files, whereas the second
could be implemented in a specific force field.

> Of course, it would be nice if this was tied into a more
> general notification scheme.  What Tcl has is pretty nice
> (though not object based) and the new one for Java sound
> great.  Has there been anything along that line developed
> for Python?

Nothing I know of - but that's a nice topic for SPAM6. Doing
it all in Python code is certainly possible, but I worry a bit
about efficiency...

Konrad Hinsen                          | E-Mail:
Laboratoire de Dynamique Moleculaire   | Tel.: +33-
Institut de Biologie Structurale       | Fax:  +33-
41, av. des Martyrs                    | Deutsch/Esperanto/English/
38027 Grenoble Cedex 1, France         | Nederlands/Francais